diff --git a/changelog.txt b/changelog.txt index 67001a8..83b28c2 100755 --- a/changelog.txt +++ b/changelog.txt @@ -2,6 +2,8 @@ Version: 0.16.37 Date: 2. 10. 2019 Improvements: + - Added the energy thief faction that will convert powered player structure into electric draining crystals + - 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 diff --git a/control.lua b/control.lua index f127454..fb414d9 100755 --- a/control.lua +++ b/control.lua @@ -1,5 +1,6 @@ -- imports +local unitUtils = require("libs/UnitUtils") local baseUtils = require("libs/BaseUtils") local chunkPropertyUtils = require("ChunkPropertyUtils") local mapUtils = require("libs/MapUtils") @@ -27,7 +28,7 @@ local INTERVAL_PROCESS = constants.INTERVAL_PROCESS local INTERVAL_CHUNK = constants.INTERVAL_CHUNK local INTERVAL_SCAN = constants.INTERVAL_SCAN local INTERVAL_SQUAD = constants.INTERVAL_SQUAD -local INTERVAL_SPAWNER = constants.INTERVAL_SPAWNER +-- local INTERVAL_SPAWNER = constants.INTERVAL_SPAWNER local PROCESS_QUEUE_SIZE = constants.PROCESS_QUEUE_SIZE @@ -52,8 +53,16 @@ local CHUNK_SIZE = constants.CHUNK_SIZE local DEFINES_DISTRACTION_NONE = defines.distraction.none local DEFINES_DISTRACTION_BY_ENEMY = defines.distraction.by_enemy +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 + -- imported functions +local convertTypeToDrainCrystal = unitUtils.convertTypeToDrainCrystal + local squadsDispatch = squadAttack.squadsDispatch local positionToChunkXY = mapUtils.positionToChunkXY @@ -66,7 +75,7 @@ local entityForPassScan = chunkUtils.entityForPassScan local processPendingChunks = chunkProcessor.processPendingChunks local processScanChunks = chunkProcessor.processScanChunks -local processSpawnerChunks = chunkProcessor.processSpawnerChunks +-- local processSpawnerChunks = chunkProcessor.processSpawnerChunks local processMap = mapProcessor.processMap local processPlayers = mapProcessor.processPlayers @@ -93,7 +102,7 @@ local retreatUnits = squadDefense.retreatUnits local getChunkBase = chunkPropertyUtils.getChunkBase -local isSpawner = stringUtils.isSpawner +local isSpawnerEgg = stringUtils.isSpawnerEgg local addRemovePlayerEntity = chunkUtils.addRemovePlayerEntity local unregisterEnemyBaseStructure = chunkUtils.unregisterEnemyBaseStructure @@ -106,7 +115,7 @@ local setChunkSpawnerEggTick = chunkPropertyUtils.setChunkSpawnerEggTick local upgradeEntity = baseUtils.upgradeEntity local rebuildNativeTables = baseUtils.rebuildNativeTables -local sSub = string.sub +local sFind = string.find local mRandom = math.random -- local references to global @@ -197,7 +206,7 @@ local function rebuildMap() map.chunkToPathRating = {} map.chunkToDeathGenerator = {} - map.queueSpawners = {} + -- map.queueSpawners = {} -- preallocating memory to be used in code, making it fast by reducing garbage generated. map.neighbors = { SENTINEL_IMPASSABLE_CHUNK, @@ -382,7 +391,7 @@ script.on_nth_tick(INTERVAL_SCAN, scanMap(map, surface, natives, tick) - map.queueSpawners = processSpawnerChunks(map, surface, natives, tick) + -- map.queueSpawners = processSpawnerChunks(map, surface, natives, tick) map.chunkToPassScan = processScanChunks(map, surface) @@ -497,6 +506,35 @@ local function onDeath(event) if (chunk ~= SENTINEL_IMPASSABLE_CHUNK) then victoryScent(map, chunk, entity.type) end + + if (cause ~= nil) then + if (ENERGY_THIEF_LOOKUP[cause.name]) then + local conversion = ENERGY_THIEF_CONVERSION_TABLE[entity.type] + if conversion then + local newEntity = surface.create_entity({position=entity.position, + name=convertTypeToDrainCrystal(entity.force.evolution_factor, conversion), + direction=entity.direction, + force="enemy"}) + if (conversion == "pole") then + local wires = entity.neighbours + if wires then + for _,v in pairs(wires.copper) do + newEntity.connect_neighbour(v); + end + for _,v in pairs(wires.red) do + newEntity.connect_neighbour({wire = DEFINES_WIRE_TYPE_RED, target_entity = v}); + end + for _,v in pairs(wires.green) do + newEntity.connect_neighbour({wire = DEFINES_WIRE_TYPE_GREEN, target_entity = v}); + end + end + elseif newEntity.backer_name then + newEntity.backer_name = "" + end + end + end + end + end if creditNatives and natives.safeBuildings and (natives.safeEntities[entity.type] or natives.safeEntityName[entity.name]) then makeImmortalEntity(surface, entity) @@ -570,24 +608,25 @@ local function onResourceDepleted(event) end end -local function onTriggerEntityCreated(event) - local entity = event.entity - if entity and entity.valid and (entity.surface.index == natives.activeSurface) then - local name = event.entity.name - if isSpawner(name) then - local tick = event.tick - local chunk = getChunkByPosition(map, entity.position) - if chunk and ((tick - getChunkSpawnerEggTick(map, chunk)) > INTERVAL_SPAWNER) then - setChunkSpawnerEggTick(map, chunk, tick) - map.queueSpawners[#map.queueSpawners+1] = { - tick, - chunk, - entity.position - } - end - end - end -end +-- local function onTriggerEntityCreated(event) +-- local entity = event.entity +-- if entity and entity.valid and (entity.surface.index == natives.activeSurface) then +-- local name = event.entity.name +-- print(name) +-- if isSpawnerEgg(name) then +-- local tick = event.tick +-- local chunk = getChunkByPosition(map, entity.position) +-- if chunk and ((tick - getChunkSpawnerEggTick(map, chunk)) > INTERVAL_SPAWNER) then +-- setChunkSpawnerEggTick(map, chunk, tick) +-- map.queueSpawners[#map.queueSpawners+1] = { +-- tick, +-- chunk, +-- entity.position +-- } +-- end +-- end +-- end +-- end local function onUsedCapsule(event) local surface = game.players[event.player_index].surface @@ -643,7 +682,7 @@ script.on_event({defines.events.on_player_mined_entity, script.on_event({defines.events.on_built_entity, defines.events.on_robot_built_entity}, onBuild) -script.on_event(defines.events.on_trigger_created_entity, onTriggerEntityCreated) +-- script.on_event(defines.events.on_trigger_created_entity, onTriggerEntityCreated) script.on_event(defines.events.on_rocket_launched, onRocketLaunch) diff --git a/data-final-fixes.lua b/data-final-fixes.lua index c5bbdd5..d4228b4 100755 --- a/data-final-fixes.lua +++ b/data-final-fixes.lua @@ -16,7 +16,7 @@ local troll = require("prototypes/Troll") local spawner = require("prototypes/Spawner") local wasp = require("prototypes/Wasp") local laser = require("prototypes/Laser") --- local energyThief = require("prototypes/EnergyThief") +local energyThief = require("prototypes/EnergyThief") if settings.startup["rampant-newEnemies"].value then @@ -57,10 +57,15 @@ if settings.startup["rampant-newEnemies"].value then if settings.startup["rampant-laserEnemy"].value then laser.addFaction() end + -- if settings.startup["rampant-energyEnemy"].value then + -- laser.addFaction() + -- end -- require("prototypes/Decaying") -- require("prototypes/Poison") -- require("prototypes/Undying") - -- energyThief.addFaction() + if settings.startup["rampant-energyThiefEnemy"].value then + energyThief.addFaction() + end for _, unitSpawner in pairs(data.raw["unit-spawner"]) do if (unitSpawner.name ~= "biter-spawner") then diff --git a/graphics/entities/thief/crystal-drain-pole.png b/graphics/entities/thief/crystal-drain-pole.png new file mode 100755 index 0000000..3bfac7b Binary files /dev/null and b/graphics/entities/thief/crystal-drain-pole.png differ diff --git a/graphics/entities/thief/crystal-drain.png b/graphics/entities/thief/crystal-drain.png new file mode 100755 index 0000000..1355785 Binary files /dev/null and b/graphics/entities/thief/crystal-drain.png differ diff --git a/graphics/entities/tunnel/tunnelEntrance.png b/graphics/entities/tunnel/tunnelEntrance.png new file mode 100755 index 0000000..4a20dc7 Binary files /dev/null and b/graphics/entities/tunnel/tunnelEntrance.png differ diff --git a/graphics/icons/thief/crystal-drain-pole.png b/graphics/icons/thief/crystal-drain-pole.png new file mode 100755 index 0000000..d126f27 Binary files /dev/null and b/graphics/icons/thief/crystal-drain-pole.png differ diff --git a/graphics/icons/thief/crystal-drain.png b/graphics/icons/thief/crystal-drain.png new file mode 100755 index 0000000..66ac3fc Binary files /dev/null and b/graphics/icons/thief/crystal-drain.png differ diff --git a/libs/BaseUtils.lua b/libs/BaseUtils.lua index 783a864..3e23e2b 100755 --- a/libs/BaseUtils.lua +++ b/libs/BaseUtils.lua @@ -90,6 +90,11 @@ local SPAWNER_WORM_VARIATIONS = constants.SPAWNER_WORM_VARIATIONS local SPAWNER_NEST_TIERS = constants.SPAWNER_NEST_TIERS local SPAWNER_NEST_VARIATIONS = constants.SPAWNER_NEST_VARIATIONS +local ENERGY_THIEF_WORM_TIERS = constants.ENERGY_THIEF_WORM_TIERS +local ENERGY_THIEF_WORM_VARIATIONS = constants.ENERGY_THIEF_WORM_VARIATIONS +local ENERGY_THIEF_NEST_TIERS = constants.ENERGY_THIEF_NEST_TIERS +local ENERGY_THIEF_NEST_VARIATIONS = constants.ENERGY_THIEF_NEST_VARIATIONS + local BASE_ALIGNMENT_SPAWNER = constants.BASE_ALIGNMENT_SPAWNER local BASE_ALIGNMENT_WASP = constants.BASE_ALIGNMENT_WASP local BASE_ALIGNMENT_NEUTRAL = constants.BASE_ALIGNMENT_NEUTRAL @@ -103,6 +108,7 @@ local BASE_ALIGNMENT_FIRE = constants.BASE_ALIGNMENT_FIRE local BASE_ALIGNMENT_FAST = constants.BASE_ALIGNMENT_FAST local BASE_ALIGNMENT_LASER = constants.BASE_ALIGNMENT_LASER local BASE_ALIGNMENT_TROLL = constants.BASE_ALIGNMENT_TROLL +local BASE_ALIGNMENT_ENERGY_THIEF = constants.BASE_ALIGNMENT_ENERGY_THIEF local BASE_ALIGNMENT_DEADZONE = constants.BASE_ALIGNMENT_DEADZONE local BASE_AI_MIN_STATE_DURATION = constants.BASE_AI_MIN_STATE_DURATION @@ -801,18 +807,18 @@ function baseUtils.rebuildNativeTables(natives, surface, rg) "spawner") end - -- if settings.startup["rampant-energyEnemy"].value then - -- processUnitClass(0, - -- 0, - -- SPAWNER_NEST_VARIATIONS, - -- SPAWNER_NEST_TIERS, - -- SPAWNER_WORM_VARIATIONS, - -- SPAWNER_WORM_TIERS, - -- surface, - -- natives, - -- BASE_ALIGNMENT_SPAWNER, - -- "spawner") - -- end + if settings.startup["rampant-energyThiefEnemy"].value then + processUnitClass(0, + 0, + ENERGY_THIEF_NEST_VARIATIONS, + ENERGY_THIEF_NEST_TIERS, + ENERGY_THIEF_WORM_VARIATIONS, + ENERGY_THIEF_WORM_TIERS, + surface, + natives, + BASE_ALIGNMENT_ENERGY_THIEF, + "spawner") + end natives.evolutionTableUnitSpawner = normalizeProbabilities(natives.evolutionTableUnitSpawner) natives.evolutionTableWorm = normalizeProbabilities(natives.evolutionTableWorm) diff --git a/libs/ChunkProcessor.lua b/libs/ChunkProcessor.lua index 49986fb..67033f4 100755 --- a/libs/ChunkProcessor.lua +++ b/libs/ChunkProcessor.lua @@ -129,34 +129,34 @@ function chunkProcessor.processScanChunks(map, surface) return {} end -function chunkProcessor.processSpawnerChunks(map, surface, natives, tick) - local queue = map.queueSpawners +-- function chunkProcessor.processSpawnerChunks(map, surface, natives, tick) +-- local queue = map.queueSpawners - local result = {} +-- local result = {} - for i=1, #queue do - local o = queue[i] - if ((tick - o[1]) > SPAWNER_EGG_TIMEOUT) then - local chunk = o[2] - local position = o[3] +-- for i=1, #queue do +-- local o = queue[i] +-- if ((tick - o[1]) > SPAWNER_EGG_TIMEOUT) then +-- local chunk = o[2] +-- local position = o[3] - retreatUnits(chunk, - position, - nil, - map, - surface, - natives, - tick, - RETREAT_GRAB_RADIUS, - false, - true) - else - result[#result+1] = o - end - end +-- retreatUnits(chunk, +-- position, +-- nil, +-- map, +-- surface, +-- natives, +-- tick, +-- RETREAT_GRAB_RADIUS, +-- false, +-- true) +-- else +-- result[#result+1] = o +-- end +-- end - return result -end +-- return result +-- end return chunkProcessor diff --git a/libs/ChunkUtils.lua b/libs/ChunkUtils.lua index 9931d00..85c2f12 100755 --- a/libs/ChunkUtils.lua +++ b/libs/ChunkUtils.lua @@ -70,6 +70,8 @@ local getChunkByPosition = mapUtils.getChunkByPosition local mFloor = math.floor +local mRandom = math.random + -- module code local function fullScan(chunk, can_place_entity, canPlaceQuery) @@ -170,10 +172,10 @@ local function getEntityOverlapChunks(map, entity) -- bottomXOffset = boundingBox.right_bottom.y -- bottomYOffset = boundingBox.right_bottom.x -- else - topXOffset = boundingBox.left_top.x - topYOffset = boundingBox.left_top.y - bottomXOffset = boundingBox.right_bottom.x - bottomYOffset = boundingBox.right_bottom.y + topXOffset = boundingBox.left_top.x + topYOffset = boundingBox.left_top.y + bottomXOffset = boundingBox.right_bottom.x + bottomYOffset = boundingBox.right_bottom.y -- end local leftTopChunkX = mFloor((center.x + topXOffset) * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE @@ -273,7 +275,7 @@ function chunkUtils.initialScan(chunk, natives, surface, map, tick, evolutionFac local wormCount = 0 local base = findNearbyBase(map, chunk, natives) if base then - if (base.alignment ~= BASE_ALIGNMENT_DEADZONE) then + if (base.alignment[1] ~= BASE_ALIGNMENT_DEADZONE) then setChunkBase(map, chunk, base) end else @@ -284,14 +286,14 @@ function chunkUtils.initialScan(chunk, natives, surface, map, tick, evolutionFac for i = 1, #nests do if rebuilding then if not isRampant(nests[i].name) then - if upgradeEntity(nests[i], surface, alignment, natives, evolutionFactor) then + if upgradeEntity(nests[i], surface, alignment[mRandom(#alignment)], natives, evolutionFactor) then nestCount = nestCount + 1 end else nestCount = nestCount + 1 end else - if upgradeEntity(nests[i], surface, alignment, natives, evolutionFactor) then + if upgradeEntity(nests[i], surface, alignment[mRandom(#alignment)], natives, evolutionFactor) then nestCount = nestCount + 1 end end @@ -301,14 +303,14 @@ function chunkUtils.initialScan(chunk, natives, surface, map, tick, evolutionFac for i = 1, #worms do if rebuilding then if not isRampant(worms[i].name) then - if upgradeEntity(worms[i], surface, alignment, natives, evolutionFactor) then + if upgradeEntity(worms[i], surface, alignment[mRandom(#alignment)], natives, evolutionFactor) then wormCount = wormCount + 1 end else wormCount = wormCount + 1 end else - if upgradeEntity(worms[i], surface, alignment, natives, evolutionFactor) then + if upgradeEntity(worms[i], surface, alignment[mRandom(#alignment)], natives, evolutionFactor) then wormCount = wormCount + 1 end end @@ -531,21 +533,15 @@ function chunkUtils.makeImmortalEntity(surface, entity) direction=repairDirection, force=repairForce}) if wires then - for connectType,neighbourGroup in pairs(wires) do - if connectType == "copper" then - for _,v in pairs(neighbourGroup) do - newEntity.connect_neighbour(v); - end - elseif connectType == "red" then - for _,v in pairs(neighbourGroup) do - newEntity.connect_neighbour({wire = DEFINES_WIRE_TYPE_RED, target_entity = v}); - end - elseif connectType == "green" then - for _,v in pairs(neighbourGroup) do - newEntity.connect_neighbour({wire = DEFINES_WIRE_TYPE_GREEN, target_entity = v}); - end - end - end + for _,v in pairs(wires.copper) do + newEntity.connect_neighbour(v); + end + for _,v in pairs(wires.red) do + newEntity.connect_neighbour({wire = DEFINES_WIRE_TYPE_RED, target_entity = v}); + end + for _,v in pairs(wires.green) do + newEntity.connect_neighbour({wire = DEFINES_WIRE_TYPE_GREEN, target_entity = v}); + end end newEntity.destructible = false diff --git a/libs/Constants.lua b/libs/Constants.lua index 4098718..c8a9c8a 100755 --- a/libs/Constants.lua +++ b/libs/Constants.lua @@ -461,6 +461,40 @@ constants.SENTINEL_IMPASSABLE_CHUNK[constants.CHUNK_TICK] = 0 constants.SENTINEL_IMPASSABLE_CHUNK.x = -1 constants.SENTINEL_IMPASSABLE_CHUNK.y = -1 +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" +} + + -- unit spawners local function roundToNearest(number, multiple) @@ -499,6 +533,22 @@ local wormTiers = settings.startup["rampant-newEnemyWormTiers"].value local unitVariations = settings.startup["rampant-newEnemyUnitVariations"].value local unitTiers = settings.startup["rampant-newEnemyUnitTiers"].value +constants.ENERGY_THIEF_LOOKUP = {} + +for tier=1, wormTiers do + local t = ((wormTiers == 5) and constants.TIER_NAMING_SET_5[tier]) or constants.TIER_NAMING_SET_10[tier] + for i=1,wormVariations do + constants.ENERGY_THIEF_LOOKUP["energy-thief-worm" .. "-v" .. i .. "-t" .. t .. "-rampant"] = true + end +end + +for tier=1, wormTiers do + local t = ((unitTiers == 5) and constants.TIER_NAMING_SET_5[tier]) or constants.TIER_NAMING_SET_10[tier] + for i=1,wormVariations do + constants.ENERGY_THIEF_LOOKUP["energy-thief-biter" .. "-v" .. i .. "-t" .. t .. "-rampant"] = true + end +end + constants.SPAWNER_EGG_TIMEOUT = constants.TICKS_A_SECOND * 5 constants.NEUTRAL_NEST_TIERS = nestTiers @@ -620,4 +670,11 @@ constants.NUCLEAR_WORM_VARIATIONS = wormVariations constants.NUCLEAR_UNIT_TIERS = unitTiers constants.NUCLEAR_UNIT_VARIATIONS = unitVariations +constants.ENERGY_THIEF_NEST_TIERS = nestTiers +constants.ENERGY_THIEF_NEST_VARIATIONS = nestVariations +constants.ENERGY_THIEF_WORM_TIERS = wormTiers +constants.ENERGY_THIEF_WORM_VARIATIONS = wormVariations +constants.ENERGY_THIEF_UNIT_TIERS = unitTiers +constants.ENERGY_THIEF_UNIT_VARIATIONS = unitVariations + return constants diff --git a/libs/StringUtils.lua b/libs/StringUtils.lua index f3319c5..bbe5818 100755 --- a/libs/StringUtils.lua +++ b/libs/StringUtils.lua @@ -1,19 +1,13 @@ local stringUtils = {} +local sFind = string.find + function stringUtils.isRampant(str) - return stringUtils.ends(str, "rampant") + return sFind(str, "rampant", -#"rampant") end -function stringUtils.isSpawner(str) - return stringUtils.starts(str, "spawner") -end - -function stringUtils.starts(str, start) - return (string.sub(str,1,string.len(start)) == start) -end - -function stringUtils.ends(str, tail) - return (tail == '') or (string.sub(str, -string.len(tail)) == tail) +function stringUtils.isSpawnerEgg(str) + return sFind(str, "spawner", -#"spawner") end return stringUtils diff --git a/libs/UnitUtils.lua b/libs/UnitUtils.lua new file mode 100755 index 0000000..213cf57 --- /dev/null +++ b/libs/UnitUtils.lua @@ -0,0 +1,53 @@ +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 + +return unitUtils diff --git a/locale/en/locale.cfg b/locale/en/locale.cfg index 5a24716..f9328ce 100755 --- a/locale/en/locale.cfg +++ b/locale/en/locale.cfg @@ -1,4 +1,16 @@ [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 + neutral-biter-v1-t1-rampant=Neutral biter: Larva class neutral-spitter-v1-t1-rampant=Neutral spitter: Larva class neutral-biter-nest-v1-t1-rampant=Neutral biter nest: Larva class @@ -11199,6 +11211,606 @@ spawner-worm-drone-v20-t10-drone-rampant=Spawner eggs: Juggernaut class spawner-biter-v20-t10-rampant=Spawner biter: Juggernaut class spawner-spitter-nest-v20-t10-rampant=Spawner spitter nest: Juggernaut class spawner-worm-v20-t10-rampant=Spawner worm: Juggernaut class +energy-thief-biter-v1-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v1-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v1-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v2-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v2-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v2-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v3-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v3-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v3-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v4-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v4-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v4-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v5-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v5-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v5-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v6-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v6-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v6-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v7-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v7-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v7-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v8-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v8-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v8-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v9-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v9-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v9-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v10-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v10-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v10-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v11-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v11-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v11-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v12-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v12-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v12-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v13-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v13-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v13-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v14-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v14-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v14-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v15-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v15-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v15-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v16-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v16-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v16-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v17-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v17-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v17-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v18-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v18-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v18-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v19-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v19-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v19-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v20-t1-rampant=Energy Thief biter: Larva class +energy-thief-biter-nest-v20-t1-rampant=Energy Thief biter nest: Larva class +energy-thief-worm-v20-t1-rampant=Energy Thief worm: Larva class +energy-thief-biter-v1-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v1-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v1-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v2-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v2-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v2-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v3-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v3-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v3-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v4-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v4-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v4-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v5-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v5-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v5-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v6-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v6-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v6-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v7-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v7-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v7-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v8-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v8-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v8-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v9-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v9-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v9-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v10-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v10-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v10-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v11-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v11-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v11-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v12-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v12-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v12-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v13-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v13-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v13-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v14-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v14-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v14-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v15-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v15-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v15-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v16-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v16-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v16-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v17-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v17-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v17-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v18-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v18-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v18-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v19-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v19-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v19-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v20-t2-rampant=Energy Thief biter: Pupae class +energy-thief-biter-nest-v20-t2-rampant=Energy Thief biter nest: Pupae class +energy-thief-worm-v20-t2-rampant=Energy Thief worm: Pupae class +energy-thief-biter-v1-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v1-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v1-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v2-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v2-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v2-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v3-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v3-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v3-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v4-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v4-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v4-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v5-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v5-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v5-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v6-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v6-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v6-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v7-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v7-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v7-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v8-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v8-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v8-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v9-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v9-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v9-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v10-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v10-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v10-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v11-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v11-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v11-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v12-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v12-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v12-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v13-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v13-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v13-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v14-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v14-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v14-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v15-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v15-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v15-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v16-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v16-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v16-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v17-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v17-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v17-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v18-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v18-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v18-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v19-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v19-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v19-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v20-t3-rampant=Energy Thief biter: Worker class +energy-thief-biter-nest-v20-t3-rampant=Energy Thief biter nest: Worker class +energy-thief-worm-v20-t3-rampant=Energy Thief worm: Worker class +energy-thief-biter-v1-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v1-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v1-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v2-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v2-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v2-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v3-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v3-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v3-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v4-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v4-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v4-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v5-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v5-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v5-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v6-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v6-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v6-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v7-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v7-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v7-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v8-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v8-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v8-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v9-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v9-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v9-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v10-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v10-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v10-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v11-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v11-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v11-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v12-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v12-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v12-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v13-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v13-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v13-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v14-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v14-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v14-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v15-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v15-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v15-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v16-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v16-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v16-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v17-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v17-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v17-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v18-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v18-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v18-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v19-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v19-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v19-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v20-t4-rampant=Energy Thief biter: Grunt class +energy-thief-biter-nest-v20-t4-rampant=Energy Thief biter nest: Grunt class +energy-thief-worm-v20-t4-rampant=Energy Thief worm: Grunt class +energy-thief-biter-v1-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v1-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v1-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v2-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v2-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v2-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v3-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v3-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v3-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v4-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v4-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v4-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v5-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v5-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v5-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v6-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v6-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v6-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v7-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v7-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v7-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v8-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v8-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v8-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v9-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v9-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v9-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v10-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v10-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v10-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v11-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v11-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v11-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v12-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v12-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v12-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v13-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v13-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v13-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v14-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v14-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v14-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v15-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v15-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v15-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v16-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v16-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v16-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v17-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v17-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v17-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v18-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v18-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v18-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v19-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v19-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v19-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v20-t5-rampant=Energy Thief biter: Soldier class +energy-thief-biter-nest-v20-t5-rampant=Energy Thief biter nest: Soldier class +energy-thief-worm-v20-t5-rampant=Energy Thief worm: Soldier class +energy-thief-biter-v1-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v1-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v1-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v2-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v2-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v2-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v3-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v3-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v3-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v4-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v4-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v4-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v5-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v5-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v5-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v6-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v6-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v6-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v7-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v7-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v7-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v8-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v8-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v8-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v9-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v9-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v9-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v10-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v10-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v10-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v11-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v11-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v11-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v12-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v12-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v12-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v13-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v13-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v13-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v14-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v14-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v14-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v15-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v15-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v15-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v16-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v16-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v16-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v17-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v17-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v17-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v18-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v18-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v18-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v19-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v19-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v19-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v20-t6-rampant=Energy Thief biter: General class +energy-thief-biter-nest-v20-t6-rampant=Energy Thief biter nest: General class +energy-thief-worm-v20-t6-rampant=Energy Thief worm: General class +energy-thief-biter-v1-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v1-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v1-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v2-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v2-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v2-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v3-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v3-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v3-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v4-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v4-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v4-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v5-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v5-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v5-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v6-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v6-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v6-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v7-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v7-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v7-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v8-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v8-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v8-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v9-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v9-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v9-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v10-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v10-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v10-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v11-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v11-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v11-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v12-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v12-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v12-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v13-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v13-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v13-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v14-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v14-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v14-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v15-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v15-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v15-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v16-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v16-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v16-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v17-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v17-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v17-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v18-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v18-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v18-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v19-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v19-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v19-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v20-t7-rampant=Energy Thief biter: Overlord class +energy-thief-biter-nest-v20-t7-rampant=Energy Thief biter nest: Overlord class +energy-thief-worm-v20-t7-rampant=Energy Thief worm: Overlord class +energy-thief-biter-v1-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v1-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v1-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v2-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v2-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v2-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v3-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v3-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v3-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v4-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v4-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v4-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v5-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v5-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v5-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v6-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v6-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v6-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v7-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v7-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v7-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v8-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v8-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v8-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v9-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v9-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v9-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v10-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v10-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v10-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v11-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v11-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v11-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v12-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v12-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v12-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v13-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v13-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v13-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v14-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v14-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v14-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v15-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v15-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v15-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v16-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v16-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v16-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v17-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v17-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v17-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v18-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v18-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v18-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v19-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v19-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v19-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v20-t8-rampant=Energy Thief biter: Titan class +energy-thief-biter-nest-v20-t8-rampant=Energy Thief biter nest: Titan class +energy-thief-worm-v20-t8-rampant=Energy Thief worm: Titan class +energy-thief-biter-v1-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v1-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v1-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v2-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v2-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v2-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v3-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v3-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v3-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v4-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v4-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v4-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v5-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v5-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v5-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v6-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v6-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v6-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v7-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v7-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v7-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v8-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v8-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v8-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v9-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v9-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v9-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v10-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v10-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v10-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v11-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v11-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v11-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v12-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v12-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v12-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v13-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v13-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v13-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v14-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v14-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v14-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v15-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v15-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v15-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v16-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v16-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v16-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v17-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v17-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v17-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v18-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v18-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v18-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v19-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v19-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v19-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v20-t9-rampant=Energy Thief biter: Leviathan class +energy-thief-biter-nest-v20-t9-rampant=Energy Thief biter nest: Leviathan class +energy-thief-worm-v20-t9-rampant=Energy Thief worm: Leviathan class +energy-thief-biter-v1-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v1-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v1-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v2-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v2-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v2-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v3-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v3-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v3-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v4-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v4-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v4-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v5-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v5-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v5-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v6-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v6-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v6-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v7-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v7-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v7-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v8-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v8-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v8-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v9-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v9-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v9-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v10-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v10-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v10-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v11-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v11-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v11-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v12-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v12-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v12-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v13-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v13-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v13-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v14-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v14-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v14-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v15-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v15-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v15-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v16-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v16-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v16-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v17-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v17-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v17-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v18-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v18-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v18-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v19-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v19-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v19-t10-rampant=Energy Thief worm: Juggernaut class +energy-thief-biter-v20-t10-rampant=Energy Thief biter: Juggernaut class +energy-thief-biter-nest-v20-t10-rampant=Energy Thief biter nest: Juggernaut class +energy-thief-worm-v20-t10-rampant=Energy Thief worm: Juggernaut class [entity-description] diff --git a/prototypes/EnergyThief.lua b/prototypes/EnergyThief.lua new file mode 100755 index 0000000..289fee5 --- /dev/null +++ b/prototypes/EnergyThief.lua @@ -0,0 +1,598 @@ + +-- imports + +local thiefUtils = require("utils/ThiefUtils") +local biterUtils = require("utils/BiterUtils") +local beamUtils = require("utils/BeamUtils") +local attackBall = require("utils/AttackBall") +local swarmUtils = require("SwarmUtils") +package.path = "../libs/?.lua;" .. package.path +local constants = require("Constants") + +-- constants + +local energyThief = {} + +local ENERGY_THIEF_UNIT_TIERS = constants.ENERGY_THIEF_UNIT_TIERS +local ENERGY_THIEF_UNIT_VARIATIONS = constants.ENERGY_THIEF_UNIT_VARIATIONS + +local ENERGY_THIEF_NEST_TIERS = constants.ENERGY_THIEF_NEST_TIERS +local ENERGY_THIEF_NEST_VARIATIONS = constants.ENERGY_THIEF_NEST_VARIATIONS + +local ENERGY_THIEF_WORM_TIERS = constants.ENERGY_THIEF_WORM_TIERS +local ENERGY_THIEF_WORM_VARIATIONS = constants.ENERGY_THIEF_WORM_VARIATIONS + +-- imported functions + +local buildUnitSpawner = swarmUtils.buildUnitSpawner +local buildWorm = swarmUtils.buildWorm +local createElectricAttack = biterUtils.createElectricAttack +local createAttackBall = attackBall.createAttackBall +local makeLaser = beamUtils.makeLaser +local createRangedAttack = biterUtils.createRangedAttack +local makeBeam = beamUtils.makeBeam +local makeBubble = beamUtils.makeBubble +local makeDrainCrystal = thiefUtils.makeDrainCrystal + +local makeUnitAlienLootTable = biterUtils.makeUnitAlienLootTable +local makeSpawnerAlienLootTable = biterUtils.makeSpawnerAlienLootTable +local makeWormAlienLootTable = biterUtils.makeWormAlienLootTable + +function energyThief.addFaction() + + local biterLoot = makeUnitAlienLootTable("blue") + local spawnerLoot = makeSpawnerAlienLootTable("blue") + local wormLoot = makeWormAlienLootTable("blue") + + local electricBubble = makeBubble({ + name = "energy-thief-worm", + lTint = {r=0, g=0, b=1, a=1} + }) + + local softSmoke = "the-soft-smoke-rampant" + + -- energy-thief biters + buildUnitSpawner( + { + unit = { + name = "energy-thief-biter", + + attributes = { + explosion = "blood-explosion-small" + }, + loot = biterLoot, + attack = { + damageType = "electric" + }, + resistances = {}, + + type = "biter", + attackName = "biter-energy-thief", + tint1 = {r=0, g=0, b=0.83, a=0.65}, + tint2 = {r=0, g=0, b=0.63, a=0.65} + }, + + unitSpawner = { + name = "energy-thief-biter-nest", + + loot = spawnerLoot, + attributes = {}, + resistances = {}, + tint = {r=0, g=0, b=0.83, a=0.65} + } + }, + + { + unit = { + { + type = "attribute", + name = "health", + [1] = 10, + [2] = 50, + [3] = 200, + [4] = 350, + [5] = 750, + [6] = 1000, + [7] = 1500, + [8] = 2500, + [9] = 4500, + [10] = 7000 + }, + + { + type = "attack", + name = "width", + [1] = 1.5, + [2] = 1.5, + [3] = 1.6, + [4] = 1.6, + [5] = 1.7, + [6] = 1.7, + [7] = 1.8, + [8] = 1.8, + [9] = 1.9, + [10] = 1.9 + }, + + { + type = "attack", + name = "damageInterval", + [1] = 20, + [2] = 20, + [3] = 21, + [4] = 21, + [5] = 22, + [6] = 22, + [7] = 23, + [8] = 23, + [9] = 24, + [10] = 24 + }, + + { + type = "attack", + name = "duration", + [1] = 20, + [2] = 20, + [3] = 21, + [4] = 21, + [5] = 22, + [6] = 22, + [7] = 23, + [8] = 23, + [9] = 24, + [10] = 24 + }, + + { + type = "resistance", + name = "laser", + decrease = { + [1] = 3, + [2] = 3, + [3] = 7, + [4] = 7, + [5] = 10, + [6] = 10, + [7] = 13, + [8] = 13, + [9] = 16, + [10] = 18 + }, + percent = { + [1] = 35, + [2] = 35, + [3] = 40, + [4] = 40, + [5] = 45, + [6] = 45, + [7] = 50, + [8] = 55, + [9] = 55, + [10] = 60 + } + }, + + { + type = "resistance", + name = "electric", + decrease = { + [1] = 7, + [2] = 7, + [3] = 10, + [4] = 10, + [5] = 13, + [6] = 13, + [7] = 16, + [8] = 16, + [9] = 19, + [10] = 23 + }, + percent = { + [1] = 65, + [2] = 65, + [3] = 70, + [4] = 75, + [5] = 75, + [6] = 80, + [7] = 85, + [8] = 85, + [9] = 90, + [10] = 90 + } + }, + + { + type = "attack", + name = "range", + [1] = 11, + [2] = 11, + [3] = 12, + [4] = 12, + [5] = 13, + [6] = 13, + [7] = 14, + [8] = 14, + [9] = 15, + [10] = 15 + } + }, + + unitSpawner = { + + { + type = "resistance", + name = "laser", + decrease = { + [1] = 3, + [2] = 3, + [3] = 7, + [4] = 7, + [5] = 10, + [6] = 10, + [7] = 13, + [8] = 13, + [9] = 16, + [10] = 18 + }, + percent = { + [1] = 35, + [2] = 35, + [3] = 40, + [4] = 40, + [5] = 45, + [6] = 45, + [7] = 50, + [8] = 55, + [9] = 55, + [10] = 60 + } + }, + + { + type = "resistance", + name = "electric", + decrease = { + [1] = 7, + [2] = 7, + [3] = 10, + [4] = 10, + [5] = 13, + [6] = 13, + [7] = 16, + [8] = 16, + [9] = 19, + [10] = 23 + }, + percent = { + [1] = 65, + [2] = 65, + [3] = 70, + [4] = 75, + [5] = 75, + [6] = 80, + [7] = 85, + [8] = 85, + [9] = 90, + [10] = 90 + } + } + } + }, + + function (attributes) + return createElectricAttack(attributes, + makeBeam(attributes), + biterattackanimation(attributes.scale, attributes.tint1, attributes.tint2)) + end, + + { + unit = ENERGY_THIEF_UNIT_VARIATIONS, + unitSpawner = ENERGY_THIEF_NEST_VARIATIONS + }, + + { + unit = ENERGY_THIEF_UNIT_TIERS, + unitSpawner = ENERGY_THIEF_NEST_TIERS + } + ) + + -- energy-thief worms + buildWorm( + { + name = "energy-thief-worm", + + loot = wormLoot, + attributes = {}, + attack = { + type = "projectile", + bubble = electricBubble, + damageType = "electric", + softSmokeName = softSmoke, + pointEffects = function(attributes) + return + { + { + type="nested-result", + action = { + { + type = "cluster", + cluster_count = attributes.clusters, + distance = attributes.clusterDistance, + distance_deviation = 3, + action_delivery = + { + type = "projectile", + projectile = attributes.laserName, + duration = 20, + direction_deviation = 0.6, + starting_speed = attributes.startingSpeed, + starting_speed_deviation = 0.3 + } + } + }, + } + } + end + }, + resistances = {}, + attackName = "worm-energy-thief", + tint = {r=0, g=0, b=0.83, a=0.65}, + pTint = {r=0, g=0, b=0.8, a=1}, + sTint = {r=0, g=0, b=0.8, a=1}, + lTint = {r=0, g=0, b=0.8, a=1} + }, + + { + { + type = "attack", + name = "startingSpeed", + [1] = 0.25, + [2] = 0.25, + [3] = 0.27, + [4] = 0.27, + [5] = 0.29, + [6] = 0.29, + [7] = 0.31, + [8] = 0.31, + [9] = 0.33, + [10] = 0.33 + }, + + { + type = "attack", + name = "clusterDistance", + [1] = 3, + [2] = 3, + [3] = 4, + [4] = 4, + [5] = 5, + [6] = 5, + [7] = 6, + [8] = 6, + [9] = 7, + [10] = 7 + }, + + { + type = "attack", + name = "clusters", + min = 2, + [1] = 5, + [2] = 5, + [3] = 6, + [4] = 6, + [5] = 7, + [6] = 7, + [7] = 8, + [8] = 8, + [9] = 9, + [10] = 9 + }, + + { + type = "resistance", + name = "laser", + decrease = { + [1] = 3, + [2] = 3, + [3] = 7, + [4] = 7, + [5] = 10, + [6] = 10, + [7] = 13, + [8] = 13, + [9] = 16, + [10] = 18 + }, + percent = { + [1] = 35, + [2] = 35, + [3] = 40, + [4] = 40, + [5] = 45, + [6] = 45, + [7] = 50, + [8] = 55, + [9] = 55, + [10] = 60 + } + }, + + { + type = "resistance", + name = "electric", + decrease = { + [1] = 7, + [2] = 7, + [3] = 10, + [4] = 10, + [5] = 13, + [6] = 13, + [7] = 16, + [8] = 16, + [9] = 19, + [10] = 23 + }, + percent = { + [1] = 65, + [2] = 65, + [3] = 70, + [4] = 75, + [5] = 75, + [6] = 80, + [7] = 85, + [8] = 85, + [9] = 90, + [10] = 90 + } + } + + }, + + function (attributes) + attributes.laserName = makeLaser(attributes) + return createRangedAttack(attributes, + createAttackBall(attributes)) + end, + + ENERGY_THIEF_WORM_VARIATIONS, + ENERGY_THIEF_WORM_TIERS + ) + + data:extend({ + { + type = "item", + name = "crystal-drain-pole-rampant", + icon = "__Rampant__/graphics/icons/thief/crystal-drain.png", + icon_size = 32, + flags = {"goes-to-quickbar"}, + subgroup = "energy", + order = "e[accumulator]-a[accumulator]", + place_result = "crystal-drain-pole-rampant", + stack_size = 50 + }, + + { + type = "electric-pole", + name = "crystal-drain-pole-rampant", + icon = "__Rampant__/graphics/icons/thief/crystal-drain.png", + icon_size = 32, + flags = {}, + minable = {hardness = 0.2, mining_time = 0.5, result = "big-electric-pole"}, + max_health = 150, + healing_per_tick = 0.02, + corpse = "medium-remnants", + resistances = + { + { + type = "fire", + percent = 100 + }, + { + type = "electric", + percent = 100 + }, + { + type = "laser", + percent = 100 + } + }, + collision_box = {{-0.55, -0.55}, {0.55, 0.55}}, + selection_box = {{-0.55, -0.55}, {0.55, 0.55}}, + drawing_box = {{-1, -3}, {1, 0.5}}, + maximum_wire_distance = 30, + supply_area_distance = 9, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + pictures = + { + filename = "__Rampant__/graphics/entities/thief/crystal-drain-pole.png", + priority = "high", + width = 168, + height = 130, + direction_count = 4, + shift = {1.6, -1.4} + }, + connection_points = + { + { + shadow = + { + copper = {2.7, 0}, + green = {1.8, 0}, + red = {3.6, 0} + }, + wire = + { + copper = {0, -2.5}, + green = {-0.59375, -2.5}, + red = {0.625, -2.5} + } + }, + { + shadow = + { + copper = {3.1, 0.2}, + green = {2.3, -0.3}, + red = {3.8, 0.6} + }, + wire = + { + copper = {-0.0625, -2.5}, + green = {-0.5, -3}, + red = {0.34375, -2} + } + }, + { + shadow = + { + copper = {2.9, 0.06}, + green = {3.0, -0.6}, + red = {3.0, 0.8} + }, + wire = + { + copper = {-0.09375, -2.5}, + green = {-0.09375, -3}, + red = {-0.09375, -2} + } + }, + { + shadow = + { + copper = {3.1, 0.2}, + green = {3.8, -0.3}, + red = {2.35, 0.6} + }, + wire = + { + copper = {-0.0625, -2.4}, + green = {0.375, -2.9}, + red = {-0.46875, -2.4} + } + } + }, + radius_visualisation_picture = + { + filename = "__base__/graphics/entity/small-electric-pole/electric-pole-radius-visualization.png", + width = 12, + height = 12, + priority = "extra-high-no-scale" + } + } + }) + + for i=1,10 do + local drainCrystalAttributes = { + name = "crystal-v" .. i, + drain = i * 300 .. "kW", + scale = (i * 0.1) + 0.5, + health = 100 * i + } + + makeDrainCrystal(drainCrystalAttributes) + end + +end + +return energyThief diff --git a/prototypes/Spawner.lua b/prototypes/Spawner.lua index 05be79a..f01e978 100755 --- a/prototypes/Spawner.lua +++ b/prototypes/Spawner.lua @@ -123,7 +123,7 @@ function spawner.addFaction() } end, { - { + { type = "attribute", name = "health", [1] = 100, @@ -152,7 +152,7 @@ function spawner.addFaction() [9] = 0.33, [10] = 0.33 }, - + { type = "attack", name = "clusterDistance", @@ -167,7 +167,7 @@ function spawner.addFaction() [9] = 7, [10] = 7 }, - + { type = "attack", name = "clusters", @@ -182,9 +182,9 @@ function spawner.addFaction() [8] = 8, [9] = 9, [10] = 9 - }, + }, - { + { type = "attribute", name = "ttl", [1] = 400, @@ -198,8 +198,8 @@ function spawner.addFaction() [9] = 600, [10] = 600 }, - - { + + { type = "attack", name = "damage", [1] = 2, @@ -213,7 +213,7 @@ function spawner.addFaction() [9] = 35, [10] = 40 }, - + { type = "attribute", name = "movement", @@ -257,7 +257,7 @@ function spawner.addFaction() [9] = 14, [10] = 14 }, - + { type = "attack", name = "range", @@ -287,7 +287,7 @@ function spawner.addFaction() [9] = 2.0, [10] = 2.5 } - + }, SPAWNER_UNIT_VARIATIONS, SPAWNER_UNIT_TIERS @@ -371,7 +371,7 @@ function spawner.addFaction() } end, { - { + { type = "attribute", name = "health", [1] = 100, @@ -400,7 +400,7 @@ function spawner.addFaction() [9] = 0.33, [10] = 0.33 }, - + { type = "attack", name = "clusterDistance", @@ -415,7 +415,7 @@ function spawner.addFaction() [9] = 7, [10] = 7 }, - + { type = "attack", name = "clusters", @@ -432,7 +432,7 @@ function spawner.addFaction() [10] = 9 }, - { + { type = "attribute", name = "ttl", [1] = 400, @@ -446,8 +446,8 @@ function spawner.addFaction() [9] = 600, [10] = 600 }, - - { + + { type = "attack", name = "damage", [1] = 2, @@ -461,7 +461,7 @@ function spawner.addFaction() [9] = 35, [10] = 40 }, - + { type = "attribute", name = "movement", @@ -505,7 +505,7 @@ function spawner.addFaction() [9] = 14, [10] = 14 }, - + { type = "attack", name = "range", @@ -535,7 +535,7 @@ function spawner.addFaction() [9] = 2.0, [10] = 2.5 } - + }, SPAWNER_WORM_VARIATIONS, SPAWNER_WORM_TIERS @@ -585,7 +585,7 @@ function spawner.addFaction() [9] = 165, [10] = 180 } - + }, math.max(SPAWNER_UNIT_VARIATIONS,SPAWNER_WORM_VARIATIONS), math.max(SPAWNER_UNIT_TIERS,SPAWNER_WORM_TIERS) @@ -605,10 +605,10 @@ function spawner.addFaction() attack = { type = "projectile", softSmokeName = softSmoke, - triggerCreated = true, + triggerCreated = false, directionOnly = true, sourceEffect = function (attributes) - return + return { { type = "damage", @@ -641,7 +641,7 @@ function spawner.addFaction() { unit = { - { + { type = "attack", name = "cooldown", [1] = 180, @@ -655,11 +655,11 @@ function spawner.addFaction() [9] = 170, [10] = 170 } - + }, unitSpawner = { - + } }, @@ -695,12 +695,12 @@ function spawner.addFaction() { name = "spawner-worm", - loot = wormLoot, + loot = wormLoot, attributes = { }, attack = { type = "projectile", - triggerCreated = true, + triggerCreated = false, softSmokeName = softSmoke }, resistances = {}, diff --git a/prototypes/UnitClasses.lua b/prototypes/UnitClasses.lua index 0bb0aee..f45c5cf 100755 --- a/prototypes/UnitClasses.lua +++ b/prototypes/UnitClasses.lua @@ -1,8 +1,8 @@ -- module code -local function generateLocal() +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 = {"Neutral", "Acid", "Physical", "Electric", "Suicide", "Nuclear", "Fire", "Inferno", "Troll", "Fast", "Laser", "Wasp", "Spawner", "Xi", "Omicron", "Pi", "Rho", "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega"} + local names = {"Neutral", "Acid", "Physical", "Electric", "Suicide", "Nuclear", "Fire", "Inferno", "Troll", "Fast", "Laser", "Wasp", "Spawner", "Energy Thief", "Omicron", "Pi", "Rho", "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega"} local sizes = {"Larva", "Pupae", "Worker", "Grunt", "Soldier", "General", "Overlord", "Titan", "Leviathan", "Juggernaut"} print("[entity-name]") @@ -21,11 +21,11 @@ local function generateLocal() 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: " .. size .. " class") print("acid-spitter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter: " .. size .. " class") print("acid-biter-nest-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. size .. " class") @@ -35,12 +35,12 @@ local function generateLocal() 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: " .. size .. " class") + + print("physical-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. size .. " class") print("physical-biter-nest-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. size .. " class") print("physical-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. size .. " class") end @@ -51,8 +51,8 @@ local function generateLocal() for t = 1, 10 do local size = sizes[t] for v = 1, 20 do - - print("electric-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. size .. " class") + + print("electric-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. size .. " class") print("electric-biter-nest-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. size .. " class") print("electric-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. size .. " class") @@ -64,8 +64,8 @@ local function generateLocal() for t = 1, 10 do local size = sizes[t] for v = 1, 20 do - - print("suicide-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. size .. " class") + + print("suicide-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. size .. " class") print("suicide-biter-nest-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. size .. " class") print("suicide-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. size .. " class") @@ -78,7 +78,7 @@ local function generateLocal() local size = sizes[t] for v = 1, 20 do - print("nuclear-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. size .. " class") + print("nuclear-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. size .. " class") print("nuclear-biter-nest-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. size .. " class") print("nuclear-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. size .. " class") @@ -162,7 +162,7 @@ local function generateLocal() end name = names[13] - + for t = 1, 10 do local size = sizes[t] for v = 1, 20 do @@ -175,5 +175,16 @@ local function generateLocal() end end - + name = names[14] + + for t = 1, 10 do + local size = sizes[t] + for v = 1, 20 do + print("energy-thief-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. size .. " class") + print("energy-thief-biter-nest-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. size .. " class") + print("energy-thief-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. size .. " class") + end + end + + end diff --git a/prototypes/utils/ThiefUtils.lua b/prototypes/utils/ThiefUtils.lua new file mode 100755 index 0000000..a8150e9 --- /dev/null +++ b/prototypes/utils/ThiefUtils.lua @@ -0,0 +1,86 @@ +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 = {"goes-to-quickbar"}, + 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 = "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 = "fire", + percent = 100 + }, + { + type = "electric", + percent = 100 + }, + { + type = "laser", + percent = 100 + } + }, + 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/settings.lua b/settings.lua index 2526f38..800498a 100755 --- a/settings.lua +++ b/settings.lua @@ -463,6 +463,15 @@ data:extend({ per_user = false }, + { + type = "bool-setting", + name = "rampant-energyThiefEnemy", + setting_type = "startup", + default_value = true, + order = "l[modifier]-x[unit]", + per_user = false + }, + { type = "bool-setting", name = "rampant-disableVanillaAI",