diff --git a/Upgrade.lua b/Upgrade.lua index 7db31de..9919246 100755 --- a/Upgrade.lua +++ b/Upgrade.lua @@ -253,6 +253,13 @@ function upgrade.attempt(natives) game.surfaces[natives.activeSurface].print("Rampant - Version 0.16.40") global.version = constants.VERSION_75 end + if (global.version < constants.VERSION_76) then + + natives.drainPylons = {} + + game.surfaces[natives.activeSurface].print("Rampant - Version 0.16.41") + global.version = constants.VERSION_76 + end return starting ~= global.version, natives end diff --git a/changelog.txt b/changelog.txt index 41c8479..1f708b0 100755 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,28 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.16.41 +Date: 2. 18. 2019 + Tweaks: + - Added energy thief crystal and pylon physical resistance 25% + - Increased crystal pylon health from 150 to 750 + - Decreased electric 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 diff --git a/control.lua b/control.lua index 660e1b1..b357eb1 100755 --- a/control.lua +++ b/control.lua @@ -207,6 +207,7 @@ local function rebuildMap() map.chunkToPassable = {} map.chunkToPathRating = {} map.chunkToDeathGenerator = {} + map.chunkToDrained = {} -- map.queueSpawners = {} @@ -451,6 +452,7 @@ local function onDeath(event) local entityPosition = entity.position local chunk = getChunkByPosition(map, entityPosition) local cause = event.cause + local tick = event.tick if (entity.force.name == "enemy") then if (entity.type == "unit") then @@ -459,7 +461,6 @@ local function onDeath(event) deathScent(map, chunk) if event.force and (event.force.name ~= "enemy") and (chunk[MOVEMENT_PHEROMONE] < -natives.retreatThreshold) then - local tick = event.tick local artilleryBlast = (cause and ((cause.type == "artillery-wagon") or (cause.type == "artillery-turret"))) @@ -487,7 +488,6 @@ local function onDeath(event) end elseif event.force and (event.force.name ~= "enemy") and ((entity.type == "unit-spawner") or (entity.type == "turret")) then - local tick = event.tick if (chunk ~= SENTINEL_IMPASSABLE_CHUNK) then unregisterEnemyBaseStructure(map, entity) @@ -505,6 +505,25 @@ local function onDeath(event) (cause and ((cause.type == "artillery-wagon") or (cause.type == "artillery-turret")))) end end + + local pair = natives.drainPylons[entity.unit_number] + if pair then + local target = pair[1] + local pole = pair[2] + if target == entity then + natives.drainPylons[entity.unit_number] = nil + if pole.valid then + natives.drainPylons[pole.unit_number] = nil + pole.die() + end + elseif (pole == entity) then + natives.drainPylons[entity.unit_number] = nil + if target.valid then + natives.drainPylons[target.unit_number] = nil + target.destroy() + end + end + end elseif (entity.force.name ~= "enemy") then local creditNatives = false if (event.force ~= nil) and (event.force.name == "enemy") then @@ -513,24 +532,38 @@ local function onDeath(event) victoryScent(map, chunk, entity.type) end - if (cause ~= nil) then - if (ENERGY_THIEF_LOOKUP[cause.name]) then + local drained = (entity.type == "electric-turret") and map.chunkToDrained[chunk] + if (cause ~= nil) 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[entity.type] 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} + natives.drainPylons[targetEntity.unit_number] = pair + natives.drainPylons[newEntity.unit_number] = pair local wires = entity.neighbours if wires then for _,v in pairs(wires.copper) do - newEntity.connect_neighbour(v); + if (v.valid) then + newEntity.connect_neighbour(v); + end end for _,v in pairs(wires.red) do - newEntity.connect_neighbour({wire = DEFINES_WIRE_TYPE_RED, target_entity = v}); + if (v.valid) then + newEntity.connect_neighbour({wire = DEFINES_WIRE_TYPE_RED, target_entity = v}); + end end for _,v in pairs(wires.green) do - newEntity.connect_neighbour({wire = DEFINES_WIRE_TYPE_GREEN, target_entity = v}); + if (v.valid) then + newEntity.connect_neighbour({wire = DEFINES_WIRE_TYPE_GREEN, target_entity = v}); + end end end elseif newEntity.backer_name then @@ -634,6 +667,18 @@ local function onRocketLaunch(event) end end +local function onTriggerEntityCreated(event) + local entity = event.entity + if entity.valid and (entity.name == "drain-trigger-rampant") then + local chunk = getChunkByPosition(map, entity.position) + if (chunk ~= SENTINEL_IMPASSABLE_CHUNK) then + map.chunkToDrained[chunk] = event.tick + 60 + end + entity.destroy() + end + +end + local function onInit() global.map = {} global.pendingChunks = {} @@ -660,6 +705,8 @@ script.on_event({defines.events.on_player_built_tile, 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_biter_base_built, onEnemyBaseBuild) script.on_event({defines.events.on_player_mined_entity, defines.events.on_robot_mined_entity}, onMine) diff --git a/info.json b/info.json index d497864..8d3f005 100755 --- a/info.json +++ b/info.json @@ -1,7 +1,7 @@ { "name" : "Rampant", "factorio_version" : "0.16", - "version" : "0.16.40", + "version" : "0.16.41", "title" : "Rampant", "author" : "Veden", "homepage" : "https://forums.factorio.com/viewtopic.php?f=94&t=31445", diff --git a/libs/ChunkUtils.lua b/libs/ChunkUtils.lua index bebee79..d8d0199 100755 --- a/libs/ChunkUtils.lua +++ b/libs/ChunkUtils.lua @@ -537,13 +537,19 @@ function chunkUtils.makeImmortalEntity(surface, entity) force=repairForce}) if wires then for _,v in pairs(wires.copper) do - newEntity.connect_neighbour(v); + if (v.valid) then + newEntity.connect_neighbour(v); + end end for _,v in pairs(wires.red) do - newEntity.connect_neighbour({wire = DEFINES_WIRE_TYPE_RED, target_entity = v}); + if (v.valid) then + newEntity.connect_neighbour({wire = DEFINES_WIRE_TYPE_RED, target_entity = v}); + end end for _,v in pairs(wires.green) do - newEntity.connect_neighbour({wire = DEFINES_WIRE_TYPE_GREEN, target_entity = v}); + if (v.valid) then + newEntity.connect_neighbour({wire = DEFINES_WIRE_TYPE_GREEN, target_entity = v}); + end end end diff --git a/libs/Constants.lua b/libs/Constants.lua index 9db2569..e43d751 100755 --- a/libs/Constants.lua +++ b/libs/Constants.lua @@ -27,6 +27,7 @@ constants.VERSION_57 = 57 constants.VERSION_72 = 72 constants.VERSION_73 = 73 constants.VERSION_75 = 75 +constants.VERSION_76 = 76 -- misc diff --git a/libs/MapProcessor.lua b/libs/MapProcessor.lua index 484619c..a2f8daf 100755 --- a/libs/MapProcessor.lua +++ b/libs/MapProcessor.lua @@ -257,6 +257,7 @@ function mapProcessor.scanMap(map, surface, natives, tick) local rallys = map.chunkToRallys local spawners = map.chunkToSpawner local settlers = map.chunkToSettler + local drained = map.chunkToDrained local processQueue = map.processQueue local endIndex = mMin(index + SCAN_QUEUE_SIZE, #processQueue) @@ -290,6 +291,11 @@ function mapProcessor.scanMap(map, surface, natives, tick) settlers[chunk] = nil end + local drainTick = drained[chunk] + if drainTick and ((tick - drainTick) > 0) then + drained[chunk] = nil + end + local closeBy = findNearbySquad(map, chunk, chunk) if closeBy then diff --git a/locale/en/locale.cfg b/locale/en/locale.cfg index 90a408d..6d37a16 100755 --- a/locale/en/locale.cfg +++ b/locale/en/locale.cfg @@ -10,6 +10,7 @@ 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 neutral-biter-v1-t1-rampant=Neutral biter: Larva class neutral-spitter-v1-t1-rampant=Neutral spitter: Larva class diff --git a/prototypes/Electric.lua b/prototypes/Electric.lua index b55f818..5433348 100755 --- a/prototypes/Electric.lua +++ b/prototypes/Electric.lua @@ -83,19 +83,19 @@ function electric.addFaction() { 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 = "attribute", + name = "health", + [1] = 10, + [2] = 50, + [3] = 200, + [4] = 350, + [5] = 1250, + [6] = 2250, + [7] = 3250, + [8] = 6500, + [9] = 12500, + [10] = 25000 + }, { type = "attack", @@ -142,6 +142,21 @@ function electric.addFaction() [10] = 24 }, + { + type = "attack", + name = "damage", + [1] = 6, + [2] = 10, + [3] = 15, + [4] = 20, + [5] = 30, + [6] = 45, + [7] = 60, + [8] = 75, + [9] = 90, + [10] = 150 + }, + { type = "resistance", name = "electric", diff --git a/prototypes/EnergyThief.lua b/prototypes/EnergyThief.lua index 289fee5..77123f4 100755 --- a/prototypes/EnergyThief.lua +++ b/prototypes/EnergyThief.lua @@ -62,7 +62,26 @@ function energyThief.addFaction() }, loot = biterLoot, attack = { - damageType = "electric" + damageType = "electric", + 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 }, resistances = {}, @@ -85,33 +104,33 @@ function energyThief.addFaction() { 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 = "attribute", + name = "health", + [1] = 10, + [2] = 50, + [3] = 200, + [4] = 350, + [5] = 1250, + [6] = 2250, + [7] = 3250, + [8] = 6500, + [9] = 12500, + [10] = 25000 + }, { 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 + [1] = 1, + [2] = 1, + [3] = 1.2, + [4] = 1.2, + [5] = 1.3, + [6] = 1.3, + [7] = 1.4, + [8] = 1.4, + [9] = 1.5, + [10] = 1.5 }, { @@ -129,6 +148,21 @@ function energyThief.addFaction() [10] = 24 }, + { + type = "attack", + name = "damage", + [1] = 4, + [2] = 8, + [3] = 15, + [4] = 20, + [5] = 25, + [6] = 35, + [7] = 50, + [8] = 65, + [9] = 80, + [10] = 140 + }, + { type = "attack", name = "duration", @@ -205,16 +239,16 @@ function energyThief.addFaction() { type = "attack", name = "range", - [1] = 11, - [2] = 11, - [3] = 12, - [4] = 12, - [5] = 13, - [6] = 13, - [7] = 14, - [8] = 14, - [9] = 15, - [10] = 15 + [1] = 9, + [2] = 9, + [3] = 10, + [4] = 10, + [5] = 11, + [6] = 11, + [7] = 12, + [8] = 12, + [9] = 13, + [10] = 13 } }, @@ -461,6 +495,43 @@ function energyThief.addFaction() ) data:extend({ + { + type = "simple-entity-with-force", + name = "drain-trigger-rampant", + render_layer = "object", + icon = "__base__/graphics/icons/steel-chest.png", + icon_size = 32, + flags = {"placeable-neutral", "player-creation"}, + order = "s-e-w-f", + minable = {mining_time = 1, result = "drain-trigger-rampant"}, + max_health = 100, + selectable_in_game = false, + corpse = "small-remnants", + collision_box = {{-0.35, -0.35}, {0.35, 0.35}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + picture = + { + filename = "__core__/graphics/empty.png", + priority = "extra-high", + width = 46, + height = 33, + shift = {0.25, 0.015625} + } + }, + + { + type = "item", + name = "drain-trigger-rampant", + icon = "__Rampant__/graphics/icons/thief/crystal-drain.png", + icon_size = 32, + hidden = true, + flags = {"goes-to-quickbar"}, + subgroup = "energy", + order = "e[accumulator]-a[accumulator]", + place_result = "drain-trigger-rampant", + stack_size = 50 + }, + { type = "item", name = "crystal-drain-pole-rampant", @@ -479,23 +550,28 @@ function energyThief.addFaction() icon = "__Rampant__/graphics/icons/thief/crystal-drain.png", icon_size = 32, flags = {}, + selectable_in_game = false, minable = {hardness = 0.2, mining_time = 0.5, result = "big-electric-pole"}, - max_health = 150, + max_health = 750, healing_per_tick = 0.02, corpse = "medium-remnants", resistances = { + { + type = "physical", + percent = 25 + }, { type = "fire", - percent = 100 + percent = 85 }, { type = "electric", - percent = 100 + percent = 95 }, { type = "laser", - percent = 100 + percent = 90 } }, collision_box = {{-0.55, -0.55}, {0.55, 0.55}}, @@ -582,12 +658,80 @@ function energyThief.addFaction() } }) + local chest = util.table.deepcopy(data.raw["radar"]["radar"]) + chest.name = "pylon-target-rampant" + chest.icon = "__Rampant__/graphics/icons/thief/crystal-drain.png" + chest.flags = {"not-repairable", "not-on-map"} + chest.pictures = { + layers={ + { + filename = "__core__/graphics/empty.png", + priority = "low", + width = 46, + height = 49, + direction_count = 1, + line_length = 1, + shift = {0.1875, -0.2} + } + }} + chest.max_health = 750 + chest.resistances = + { + { + type = "physical", + percent = 25 + }, + { + type = "fire", + percent = 85 + }, + { + type = "electric", + percent = 95 + }, + { + type = "laser", + percent = 90 + } + } + chest.energy_usage = "500kW" + -- chest.collision_mask = {} + chest.collision_box = nil + chest.selection_box = {{-0.55, -0.55}, {0.55, 0.55}} + chest.minable.result = "pylon-target-rampant" + chest.working_sound = { + sound = { + { + filename = "__base__/sound/accumulator-working.ogg" + } + }, + apparent_volume = 2, + } + + data:extend({ + chest, + + { + type = "item", + name = "pylon-target-rampant", + icon = "__Rampant__/graphics/icons/thief/crystal-drain.png", + icon_size = 32, + flags = {"goes-to-quickbar"}, + subgroup = "storage", + hidden = true, + order = "a[items]-h[steel-collector]", + place_result = "pylon-target-rampant", + stack_size = 50 + } + }) + + for i=1,10 do local drainCrystalAttributes = { name = "crystal-v" .. i, - drain = i * 300 .. "kW", + drain = i * 1.3 .. "MW", scale = (i * 0.1) + 0.5, - health = 100 * i + health = 400 * i } makeDrainCrystal(drainCrystalAttributes) diff --git a/prototypes/Nuclear.lua b/prototypes/Nuclear.lua index 89f6df7..95edac4 100755 --- a/prototypes/Nuclear.lua +++ b/prototypes/Nuclear.lua @@ -70,7 +70,7 @@ function nuclear.addFaction() name = "nuclear-biter-nest", loot = spawnerLoot, - attributes = {}, + attributes = {}, resistances = {}, tint = {r=0.76, g=0.76, b=0, a=0.65} } @@ -90,11 +90,11 @@ function nuclear.addFaction() [6] = 350, [7] = 750, [8] = 1500, - [9] = 3000, - [10] = 5000 + [9] = 5000, + [10] = 10000 }, - - { + + { type = "attribute", name = "spawningTimeModifer", [1] = 0, @@ -106,10 +106,10 @@ function nuclear.addFaction() [7] = 6, [8] = 6, [9] = 8, - [10] = 8 + [10] = 8 }, - { + { type = "attack", mapping = "explosion", [1] = "explosion", @@ -121,10 +121,10 @@ function nuclear.addFaction() [7] = "massive-explosion", [8] = "massive-explosion", [9] = "massive-explosion", - [10] = "massive-explosion" + [10] = "massive-explosion" }, - { + { type = "attack", name = "radius", [1] = 5, @@ -136,10 +136,10 @@ function nuclear.addFaction() [7] = 16, [8] = 18, [9] = 18, - [10] = 20 + [10] = 20 }, - { + { type = "attack", name = "repeatCount", [1] = 150, @@ -153,8 +153,8 @@ function nuclear.addFaction() [9] = 550, [10] = 600 }, - - { + + { type = "attack", name = "damage", [1] = 50, @@ -166,10 +166,10 @@ function nuclear.addFaction() [7] = 140, [8] = 150, [9] = 180, - [10] = 200 - }, + [10] = 200 + }, - { + { type = "attribute", name = "movement", [1] = 0.23, @@ -228,11 +228,11 @@ function nuclear.addFaction() } } }, - - unitSpawner = { + + unitSpawner = { { - + type = "attribute", name = "spawingCooldownStart", [1] = 330, @@ -244,11 +244,11 @@ function nuclear.addFaction() [7] = 315, [8] = 315, [9] = 310, - [10] = 310 + [10] = 310 }, { - + type = "attribute", name = "spawingCooldownEnd", [1] = 120, @@ -263,7 +263,7 @@ function nuclear.addFaction() [10] = 100 }, - { + { type = "attribute", name = "evolutionRequirement", [1] = 0, @@ -275,10 +275,10 @@ function nuclear.addFaction() [7] = 0.6, [8] = 0.7, [9] = 0.8, - [10] = 0.9 + [10] = 0.9 }, - { + { type = "attribute", name = "unitsOwned", [1] = 1, @@ -290,10 +290,10 @@ function nuclear.addFaction() [7] = 5, [8] = 6, [9] = 6, - [10] = 6 + [10] = 6 }, - { + { type = "attribute", name = "unitsToSpawn", [1] = 1, @@ -412,7 +412,7 @@ function nuclear.addFaction() type = "create-sticker", sticker = attributes.name .. "-sticker-rampant" } - } + } end, softSmokeName = softSmoke }, @@ -425,8 +425,8 @@ function nuclear.addFaction() }, { - - { + + { type = "attack", name = "stickerMovementModifier", [1] = 0.8, @@ -440,8 +440,8 @@ function nuclear.addFaction() [9] = 0.4, [10] = 0.4 }, - - { + + { type = "attack", name = "stickerDuration", [1] = 1800, @@ -454,7 +454,7 @@ function nuclear.addFaction() [8] = 2100, [9] = 2200, [10] = 2200 - }, + }, { type = "resistance", diff --git a/prototypes/Physical.lua b/prototypes/Physical.lua index 68e1ff0..d5ed880 100755 --- a/prototypes/Physical.lua +++ b/prototypes/Physical.lua @@ -105,12 +105,12 @@ function physical.addFaction() [2] = 150, [3] = 300, [4] = 500, - [5] = 800, - [6] = 1500, - [7] = 3000, - [8] = 6000, - [9] = 10000, - [10] = 20000 + [5] = 1500, + [6] = 3000, + [7] = 5000, + [8] = 12000, + [9] = 20000, + [10] = 40000 }, { diff --git a/prototypes/Spawner.lua b/prototypes/Spawner.lua index f01e978..b588569 100755 --- a/prototypes/Spawner.lua +++ b/prototypes/Spawner.lua @@ -581,9 +581,9 @@ function spawner.addFaction() [5] = 75, [6] = 90, [7] = 110, - [8] = 145, - [9] = 165, - [10] = 180 + [8] = 250, + [9] = 500, + [10] = 1000 } }, diff --git a/prototypes/Suicide.lua b/prototypes/Suicide.lua index aef2821..dc8f86c 100755 --- a/prototypes/Suicide.lua +++ b/prototypes/Suicide.lua @@ -77,6 +77,7 @@ function suicide.addFaction() { unit = { { + type = "attribute", name = "health", [1] = 7, @@ -87,8 +88,8 @@ function suicide.addFaction() [6] = 350, [7] = 750, [8] = 1500, - [9] = 3000, - [10] = 5000 + [9] = 5000, + [10] = 10000 }, { diff --git a/prototypes/SwarmUtils.lua b/prototypes/SwarmUtils.lua index 31ca548..aa038d3 100755 --- a/prototypes/SwarmUtils.lua +++ b/prototypes/SwarmUtils.lua @@ -286,12 +286,12 @@ local function addUnitDefaults(template, upgrades) [2] = 75, [3] = 150, [4] = 250, - [5] = 400, - [6] = 750, - [7] = 1500, - [8] = 3000, - [9] = 5000, - [10] = 10000 + [5] = 1000, + [6] = 2000, + [7] = 3500, + [8] = 7500, + [9] = 15000, + [10] = 30000 }) pushUpgrade(upgrades, @@ -367,12 +367,12 @@ local function addUnitDefaults(template, upgrades) [2] = 50, [3] = 200, [4] = 350, - [5] = 750, - [6] = 1000, - [7] = 1500, - [8] = 2500, - [9] = 4500, - [10] = 7000 + [5] = 1250, + [6] = 2250, + [7] = 3250, + [8] = 6500, + [9] = 12500, + [10] = 25000 }) pushUpgrade(upgrades, @@ -582,12 +582,12 @@ local function addUnitSpawnerDefaults(template, upgrades) [2] = 500, [3] = 750, [4] = 1500, - [5] = 2500, - [6] = 3500, - [7] = 5000, - [8] = 7000, - [9] = 10000, - [10] = 15000 + [5] = 3500, + [6] = 7500, + [7] = 11000, + [8] = 20000, + [9] = 30000, + [10] = 45000 }) pushUpgrade(upgrades, @@ -1014,12 +1014,12 @@ local function addWormDefaults(template, upgrades) [2] = 350, [3] = 500, [4] = 750, - [5] = 900, - [6] = 1000, - [7] = 1500, - [8] = 3000, - [9] = 5000, - [10] = 9000 + [5] = 2000, + [6] = 3500, + [7] = 7500, + [8] = 12000, + [9] = 20000, + [10] = 25000 }) end diff --git a/prototypes/Troll.lua b/prototypes/Troll.lua index 30ea73c..8d761aa 100755 --- a/prototypes/Troll.lua +++ b/prototypes/Troll.lua @@ -101,12 +101,12 @@ function troll.addFaction() [2] = 150, [3] = 300, [4] = 500, - [5] = 800, - [6] = 1500, - [7] = 3000, - [8] = 6000, - [9] = 10000, - [10] = 20000 + [5] = 1500, + [6] = 3000, + [7] = 5000, + [8] = 12000, + [9] = 20000, + [10] = 40000 }, { diff --git a/prototypes/utils/BiterUtils.lua b/prototypes/utils/BiterUtils.lua index d71e0ea..c1e6573 100755 --- a/prototypes/utils/BiterUtils.lua +++ b/prototypes/utils/BiterUtils.lua @@ -125,11 +125,11 @@ function biterFunctions.makeBiter(name, biterAttributes, biterAttack, biterResis subgroup="enemies", healing_per_tick = biterAttributes.healing, resistances = resistances, - collision_box = {{-0.4 * biterAttributes.scale, -0.4 * biterAttributes.scale}, + collision_box = {{-0.4 * biterAttributes.scale, -0.4 * biterAttributes.scale}, {0.4 * biterAttributes.scale, 0.4 * biterAttributes.scale}}, - selection_box = {{-0.7 * biterAttributes.scale, -1.5 * biterAttributes.scale}, + selection_box = {{-0.7 * biterAttributes.scale, -1.5 * biterAttributes.scale}, {0.7 * biterAttributes.scale, 0.3 * biterAttributes.scale}}, - sticker_box = {{-0.6 * biterAttributes.scale, -0.8 * biterAttributes.scale}, + sticker_box = {{-0.6 * biterAttributes.scale, -0.8 * biterAttributes.scale}, {0.6 * biterAttributes.scale, 0}}, attack_parameters = biterAttack, vision_distance = biterAttributes.vision or 30, @@ -165,11 +165,11 @@ function biterFunctions.makeSpitter(name, biterAttributes, biterAttack, biterRes subgroup="enemies", healing_per_tick = biterAttributes.healing, resistances = resistances, - collision_box = {{-0.4 * biterAttributes.scale, -0.4 * biterAttributes.scale}, + collision_box = {{-0.4 * biterAttributes.scale, -0.4 * biterAttributes.scale}, {0.4 * biterAttributes.scale, 0.4 * biterAttributes.scale}}, - selection_box = {{-0.7 * biterAttributes.scale, -1.5 * biterAttributes.scale}, + selection_box = {{-0.7 * biterAttributes.scale, -1.5 * biterAttributes.scale}, {0.7 * biterAttributes.scale, 0.3 * biterAttributes.scale}}, - sticker_box = {{-0.6 * biterAttributes.scale, -0.8 * biterAttributes.scale}, + sticker_box = {{-0.6 * biterAttributes.scale, -0.8 * biterAttributes.scale}, {0.6 * biterAttributes.scale, 0}}, attack_parameters = biterAttack, loot = biterAttributes.loot, @@ -265,7 +265,7 @@ function biterFunctions.makeWorm(name, attributes, attack, wormResistances) v.type = k resistances[#resistances+1] = v end --- print(name .. " " .. attributes.health) +-- print(name .. " " .. attributes.health) local o = { type = "turret", name = name .. "-rampant", @@ -318,13 +318,13 @@ function biterFunctions.createSuicideAttack(attributes, blastWave) range = attributes.range or 0.5, cooldown = attributes.cooldown or 35, ammo_category = "melee", - ammo_type = { + ammo_type = { category = "biological" }, sound = make_biter_roars(0.5), animation = biterattackanimation(attributes.scale, attributes.tint1, attributes.tint2) } - + if attributes.nuclear then o.ammo_type.action = { type = "direct", @@ -402,7 +402,7 @@ function biterFunctions.createSuicideAttack(attributes, blastWave) { type = "damage", damage = { - amount = attributes.damage, + amount = attributes.damage, type = attributes.damageType or "explosion" } }, @@ -416,7 +416,7 @@ function biterFunctions.createSuicideAttack(attributes, blastWave) check_buildability = true } } - + }, }, { @@ -449,7 +449,7 @@ function biterFunctions.createSuicideAttack(attributes, blastWave) { type = "damage", damage = { - amount = attributes.damage, + amount = attributes.damage, type = attributes.damageType or "explosion" } } @@ -460,9 +460,9 @@ function biterFunctions.createSuicideAttack(attributes, blastWave) } } } - + } - + end return o end @@ -476,7 +476,7 @@ function biterFunctions.makeWormAlienLootTable(name) 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 }, @@ -504,7 +504,7 @@ function biterFunctions.makeWormAlienLootTable(name) [10] = { item = "alien-artifact", count_min = 3, count_max = 4, probability = 0.75 } } end - + return biterLoot end @@ -516,7 +516,7 @@ function biterFunctions.makeSpawnerAlienLootTable(name) 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 }, @@ -544,7 +544,7 @@ function biterFunctions.makeSpawnerAlienLootTable(name) [10] = { item = "alien-artifact", count_min = 3, count_max = 7, probability = 0.75 } } end - + return biterLoot end @@ -598,7 +598,7 @@ function biterFunctions.makeUnitAlienLootTable(name) [10] = { item = "alien-artifact", count_min = 3, count_max = 7, probability = 0.75 } } end - + return biterLoot end @@ -655,7 +655,7 @@ function biterFunctions.createElectricAttack(attributes, electricBeam, animation type = "line", range = (attributes.range and (attributes.range + 2)) or 15, width = attributes.width or 0.5, - action_delivery = + action_delivery = (attributes.actions and attributes.actions(attributes, electricBeam)) or { type = "beam", beam = electricBeam or "electric-beam", @@ -775,14 +775,14 @@ function biterFunctions.createStreamAttack(attributes, fireAttack, animation) cooldown = attributes.cooldown, range = attributes.range, min_range = attributes.minRange, - + turn_range = attributes.turnRange, fire_penalty = attributes.firePenalty, warmup = attributes.warmup or 0, - + damage_modifier = attributes.damageModifier or 1.0, - + gun_barrel_length = 2 * attributes.scale, gun_center_shift = { north = {0, -0.65 * attributes.scale}, @@ -804,7 +804,7 @@ function biterFunctions.createStreamAttack(attributes, fireAttack, animation) } } }, - + cyclic_sound = { begin_sound = biterFunctions.biterAttackSounds(), @@ -824,7 +824,7 @@ function biterFunctions.createStreamAttack(attributes, fireAttack, animation) } }, animation = animation - } + } return attack end diff --git a/prototypes/utils/ThiefUtils.lua b/prototypes/utils/ThiefUtils.lua index a8150e9..e73c31b 100755 --- a/prototypes/utils/ThiefUtils.lua +++ b/prototypes/utils/ThiefUtils.lua @@ -7,78 +7,82 @@ function thiefUtils.makeDrainCrystal(attributes) 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 = "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 - } + { + 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 = "physical", + percent = 25 }, - energy_source = - { - type = "electric", - usage_priority = "primary-input" + { + 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" + } }, - 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 }, - } + apparent_volume = 2, + }, + radius_minimap_visualisation_color = { r = 0.059, g = 0.092, b = 0.8, a = 0.275 }, + } }) return end