1
0
mirror of https://github.com/veden/Rampant.git synced 2025-01-05 22:53:24 +02:00
Rampant/prototypes/buildings/ChunkScanner.lua

185 lines
6.1 KiB
Lua

-- 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 <https://www.gnu.org/licenses/>.
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]
data:extend(
{
{
type = "land-mine",
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),
order = "s-e-w-f",
collision_mask = {"player-layer", "object-layer", "water-tile", "train-layer"},
minable = nil,
max_health = 100,
corpse = nil,
timeout = 1,
trigger_radius = 0,
-- collision_box = generateCollisionBox(scale, st),
collision_box = generateCollisionBox(scale, "biter-spawner"),
selection_box = nil,
picture_safe =
{
filename = "__core__/graphics/empty.png",
priority = "extra-high",
width = 1,
height = 1
},
picture_set =
{
filename = "__core__/graphics/empty.png",
priority = "extra-high",
width = 1,
height = 1
}
}
}
)
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"}
}
}
}
}
)