1
0
mirror of https://github.com/veden/Rampant.git synced 2025-01-28 03:29:34 +02:00

see changelog

This commit is contained in:
Aaron Veden 2019-12-15 17:16:56 -08:00
parent 05ca2126e9
commit 8cede89337
No known key found for this signature in database
GPG Key ID: FF5990B1C6DD3F84
19 changed files with 5147 additions and 1625 deletions

View File

@ -7,6 +7,8 @@ local mathUtils = require("libs/MathUtils")
-- constants
local CONVERSION_TABLE = constants.CONVERSION_TABLE
local BASE_AI_STATE_DORMANT = constants.BASE_AI_STATE_DORMANT
local INTERVAL_LOGIC = constants.INTERVAL_LOGIC
@ -269,7 +271,7 @@ function upgrade.attempt(natives, setNewSurface)
global.version = 95
end
if (global.version < 99) then
if (global.version < 100) then
game.map_settings.unit_group.min_group_radius = constants.UNIT_GROUP_MAX_RADIUS * 0.5
game.map_settings.unit_group.max_group_radius = constants.UNIT_GROUP_MAX_RADIUS
@ -291,6 +293,19 @@ function upgrade.attempt(natives, setNewSurface)
end
end
for i=#natives.bases,1,-1 do
local base = natives.bases[i]
for x=1,#base.alignment do
local c = CONVERSION_TABLE[base.alignment[x]]
if (x == 1) and not c then
base.alignment = {}
else
base.alignment[x] = c
end
end
end
natives.ENEMY_VARIATIONS = settings.startup["rampant-newEnemyVariations"].value
natives.nextChunkSort = nil
@ -321,7 +336,7 @@ function upgrade.attempt(natives, setNewSurface)
if not setNewSurface then
game.surfaces[natives.activeSurface].print("Rampant - Version 0.17.29")
end
global.version = 99
global.version = 100
end
return starting ~= global.version, natives

View File

@ -1,6 +1,6 @@
---------------------------------------------------------------------------------------------------
Version: 0.17.29
Date: 07. 12. 2019
Date: 15. 12. 2019
Optional Graphics:
- New Hi and Low resolution graphics for Troll and Physical Factions biters, armored biters (Thanks to CybranM, requires downloading separate mod Armoured Biters)
Features:
@ -12,7 +12,11 @@ Date: 07. 12. 2019
- Collision checker for squads and squad movement from a container to a unit
- Attack waves should generate more localized squad formations, so that biters appear to attack from all sides less
- New AI temperament system
- Spawner pollution coverage detection
- Acid biter melee attack now leaves acid puddle
Tweaks:
- Reduced size of new enemy lower tiers
- Onslaught AI setting and aiAggressiveness setting removed
- Increased minimum unit count for a retreat from 3 to 6
- Biters and Spitters now are affected by tile modifiers
- Nerfed inferno spitter fire damage and duration to reasonable levels
@ -25,10 +29,10 @@ Date: 07. 12. 2019
- Reduced sticker damage and duration everywhere
- Switched general spit projectile from direction only to positional targeting
- Added spit projectile stickers to tooltip
- Default for new enemies spit projectile stickers no longer do damage only slow
- Default for new enemies spit projectile stickers damage reduced by half
- Spawner spitter and worm eggs now damage the immediate area around the egg
- Acid pools no longer cause friendly fire
- Prioritize settler group creation of attack squads
- Prioritize settler group creation over attack squads
- Biter faction color should match map color now
- Increased unit spawner spawning time by 3x
Optimizations:
@ -37,6 +41,7 @@ Date: 07. 12. 2019
- Regrouping squads and builder clean up put onto separate intervals
- Reusing chunk scanner tables
Bugfixes:
- Fixed spawner egg and wasp size being larger than intended
- Fixed old savegames penalties having nil chunk index
- Fixed that mining a resource by hand unregister all remaining resource on a tile
- Fixed pheromone dispersal not following pathing restrictions

View File

@ -476,16 +476,12 @@ local function onModSettingsChange(event)
upgrade.compareTable(natives, "deadZoneFrequency", settings.global["rampant-deadZoneFrequency"].value)
upgrade.compareTable(natives, "raidAIToggle", settings.global["rampant-raidAIToggle"].value)
upgrade.compareTable(natives, "siegeAIToggle", settings.global["rampant-siegeAIToggle"].value)
upgrade.compareTable(natives, "onslaughtAIToggle", settings.global["rampant-onslaughtAIToggle"].value)
upgrade.compareTable(natives, "attackWaveMaxSize", settings.global["rampant-attackWaveMaxSize"].value)
upgrade.compareTable(natives, "attackPlayerThreshold", settings.global["rampant-attackPlayerThreshold"].value)
upgrade.compareTable(natives, "aiNocturnalMode", settings.global["rampant-permanentNocturnal"].value)
upgrade.compareTable(natives, "aiPointsScaler", settings.global["rampant-aiPointsScaler"].value)
upgrade.compareTable(natives, "aiAggressiveness", settings.global["rampant-aiAggressiveness"].value)
upgrade.compareTable(natives, "newEnemies", settings.startup["rampant-newEnemies"].value)
upgrade.compareTable(natives, "enemySeed", settings.startup["rampant-enemySeed"].value)
@ -557,10 +553,9 @@ local function prepWorld(rebuild, surfaceIndex)
end
end
-- UNCOMMENT ME
-- if natives.newEnemies and rebuild then
-- game.forces.enemy.kill_all_units()
-- end
if natives.newEnemies and rebuild then
game.forces.enemy.kill_all_units()
end
processPendingChunks(map, surface, pendingChunks, tick, rebuild)
end
@ -619,10 +614,9 @@ script.on_nth_tick(INTERVAL_LOGIC,
end
end)
script.on_nth_tick(-- INTERVAL_TEMPERAMENT
61,
function (event)
temperamentPlanner(natives)
script.on_nth_tick(INTERVAL_TEMPERAMENT,
function (event)
temperamentPlanner(natives)
end)
script.on_nth_tick(INTERVAL_SQUAD,
@ -835,7 +829,7 @@ local function onEnemyBaseBuild(event)
true)
end
if entity and entity.valid then
event.entity = registerEnemyBaseStructure(map, entity, base)
event.entity = registerEnemyBaseStructure(map, entity, base, surface)
end
end
end
@ -962,7 +956,7 @@ local function onEntitySpawned(event)
natives,
disPos)
if entity and entity.valid then
event.entity = registerEnemyBaseStructure(map, entity, base)
event.entity = registerEnemyBaseStructure(map, entity, base, surface)
end
else
entity.destroy()

View File

@ -6,5 +6,5 @@
"author" : "Veden",
"homepage" : "https://forums.factorio.com/viewtopic.php?f=94&t=31445",
"description" : "Improves the enemies tactics by using potential fields/pheromones allowing probing of defenses, retreats, reinforcements, counterattacking, breaching, raids, rallying death cry, and player hunting. Uses blockable biter projectiles. Adds new Enemies (disabled by default). Can completely replace the vanilla AI. Difficulty setting in mod options menu.",
"dependencies" : ["base >= 0.17.12", "? bobenemies", "? Natural_Evolution_Enemies >= 0.17.0", "? Clockwork", "? Orbital Ion Cannon", "? RampantArsenal"]
"dependencies" : ["base >= 0.17.12", "? bobenemies", "? Natural_Evolution_Enemies >= 0.17.0", "? Clockwork", "? Orbital Ion Cannon", "? RampantArsenal", "? ArmouredBiters"]
}

View File

@ -57,7 +57,7 @@ local mMin = math.min
function aiPlanning.planning(natives, evolution_factor, tick)
natives.evolutionLevel = evolution_factor
local maxPoints = AI_MAX_POINTS * evolution_factor
if not natives.ranIncompatibleMessage and natives.newEnemies and (game.active_mods["bobenemies"] or game.active_mods["Natural_Evolution_Enemies"]) then
@ -95,7 +95,7 @@ function aiPlanning.planning(natives, evolution_factor, tick)
natives.baseIncrement = points
local currentPoints = natives.points
if (currentPoints < maxPoints) then
natives.points = currentPoints + points
end
@ -104,88 +104,146 @@ function aiPlanning.planning(natives, evolution_factor, tick)
natives.points = maxOverflowPoints
end
-- if (natives.temperamentTick <= tick) then
-- natives.temperament = mRandom()
-- natives.temperamentTick = randomTickEvent(tick, AI_MIN_TEMPERAMENT_DURATION, AI_MAX_TEMPERAMENT_DURATION)
-- end
if (natives.stateTick <= tick) then
-- local roll = mRandom() * mMax(1 - evolution_factor, 0.15) * natives.aiAggressiveness
-- if (roll > natives.temperament) then
-- natives.state = AI_STATE_PEACEFUL
-- else
-- roll = mRandom()
-- if (roll < 0.65) then
-- natives.state = AI_STATE_AGGRESSIVE
-- natives.canAttackTick = randomTickEvent(tick,
-- AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION,
-- AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION)
-- elseif ((natives.enabledMigration) and (natives.expansion) and (roll < 0.75)) then
-- natives.state = AI_STATE_MIGRATING
-- elseif ((natives.siegeAIToggle) and (natives.expansion) and (roll < 0.80)) then
-- natives.state = AI_STATE_SIEGE
-- elseif ((natives.onslaughtAIToggle) and (roll < 0.85)) then
-- natives.state = AI_STATE_ONSLAUGHT
-- elseif ((natives.raidAIToggle) and (evolution_factor >= 0.04)) then
-- natives.state = AI_STATE_RAIDING
-- natives.points = natives.points + 1000
-- else
-- natives.state = AI_STATE_AGGRESSIVE
-- end
-- end
local roll = mRandom()
if (natives.temperament < 1) then -- 0 - 0.05
if natives.expansion then
if (natives.temperament < 0.05) then -- 0 - 0.05
if natives.enabledMigration then
natives.state = AI_STATE_SIEGE
else
if natives.raidAIToggle then
natives.state = AI_STATE_RAIDING
if (roll < 0.85) then
natives.state = AI_STATE_AGGRESSIVE
natives.canAttackTick = randomTickEvent(tick,
AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION,
AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION)
else
natives.state = AI_STATE_RAIDING
end
else
natives.state = AI_STATE_AGGRESSIVE
natives.canAttackTick = randomTickEvent(tick,
AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION,
AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION)
end
end
elseif (natives.temperament < 0.20) then -- 0.05 - 0.2
if (roll < 0.2) then
natives.state = AI_STATE_SIEGE
elseif (roll < 0.8) then
natives.state = AI_STATE_MIGRATING
if (natives.enabledMigration) then
if (roll < 0.4) then
natives.state = AI_STATE_SIEGE
else
natives.state = AI_STATE_MIGRATING
end
else
if natives.raidAIToggle then
if (roll < 0.95) then
natives.state = AI_STATE_AGGRESSIVE
natives.canAttackTick = randomTickEvent(tick,
AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION,
AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION)
else
natives.state = AI_STATE_RAIDING
end
else
natives.state = AI_STATE_AGGRESSIVE
natives.canAttackTick = randomTickEvent(tick,
AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION,
AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION)
end
end
elseif (natives.temperament < 0.4) then -- 0.2 - 0.4
if (roll < 0.2) then
if (natives.enabledMigration) then
if (roll < 0.2) then
natives.state = AI_STATE_AGGRESSIVE
natives.canAttackTick = randomTickEvent(tick,
AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION,
AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION)
elseif (roll < 0.8) then
natives.state = AI_STATE_MIGRATING
else
natives.state = AI_STATE_PEACEFUL
end
else
if (roll < 0.6) then
natives.state = AI_STATE_AGGRESSIVE
natives.canAttackTick = randomTickEvent(tick,
AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION,
AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION)
else
natives.state = AI_STATE_PEACEFUL
end
end
elseif (natives.temperament < 0.6) then -- 0.4 - 0.6
if (roll < 0.5) then
natives.state = AI_STATE_AGGRESSIVE
elseif (roll < 0.8) then
natives.state = AI_STATE_MIGRATING
natives.canAttackTick = randomTickEvent(tick,
AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION,
AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION)
else
natives.state = AI_STATE_PEACEFUL
end
elseif (natives.temperament < 0.6) then -- 0.4 - 0.6
if (roll < 0.6) then
natives.state = AI_STATE_AGGRESSIVE
else
natives.state = AI_STATE_PEACEFUL
end
elseif (natives.temperament < 0.8) then -- 0.6 - 0.8
if (roll < 0.6) then
natives.state = AI_STATE_AGGRESSIVE
natives.canAttackTick = randomTickEvent(tick,
AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION,
AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION)
elseif (roll < 0.8) then
natives.state = AI_STATE_ONSLAUGHT
else
natives.state = AI_STATE_PEACEFUL
end
end
else -- 0.8 - 1
if (roll < 0.2) then
natives.state = AI_STATE_SIEGE
elseif (roll < 0.8) then
natives.state = AI_STATE_ONSLAUGHT
elseif (roll < 0.9) then
natives.state = AI_STATE_RAIDING
if (natives.enabledMigration and natives.raidAIToggle) then
if (roll < 0.3) then
natives.state = AI_STATE_SIEGE
elseif (roll < 0.6) then
natives.state = AI_STATE_ONSLAUGHT
elseif (roll < 0.8) then
natives.state = AI_STATE_RAIDING
else
natives.state = AI_STATE_AGGRESSIVE
natives.canAttackTick = randomTickEvent(tick,
AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION,
AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION)
end
elseif (natives.enabledMigration) then
if (roll < 0.3) then
natives.state = AI_STATE_SIEGE
elseif (roll < 0.7) then
natives.state = AI_STATE_ONSLAUGHT
else
natives.state = AI_STATE_AGGRESSIVE
natives.canAttackTick = randomTickEvent(tick,
AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION,
AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION)
end
elseif (natives.raidAIToggle) then
if (roll < 0.4) then
natives.state = AI_STATE_ONSLAUGHT
elseif (roll < 0.7) then
natives.state = AI_STATE_RAIDING
else
natives.state = AI_STATE_AGGRESSIVE
natives.canAttackTick = randomTickEvent(tick,
AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION,
AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION)
end
else
if (roll < 0.6) then
natives.state = AI_STATE_ONSLAUGHT
else
natives.state = AI_STATE_AGGRESSIVE
natives.canAttackTick = randomTickEvent(tick,
AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION,
AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION)
end
end
end
print("changing state", natives.state)
-- print("changing state", natives.state)
natives.stateTick = randomTickEvent(tick, AI_MIN_STATE_DURATION, AI_MAX_STATE_DURATION)
end
@ -207,87 +265,75 @@ function aiPlanning.temperamentPlanner(natives)
local delta = 0
if activeNests > 0 then
local val = (1 * activeNests)
local val = (1.5 * activeNests)
delta = delta + val
if destroyPlayerBuildings > 0 then
delta = delta - (1 * destroyPlayerBuildings)
else
delta = delta + val
delta = delta - (200 * destroyPlayerBuildings)
end
else
delta = delta - 1
if destroyPlayerBuildings > 0 then
delta = delta - (1 * destroyPlayerBuildings)
else
delta = delta - 1
if (currentTemperament > 0) then
delta = delta - (200 * destroyPlayerBuildings)
else
delta = delta + (200 * destroyPlayerBuildings)
end
end
end
if activeRaidNests > 0 then
local val = (0.01 * activeRaidNests)
local val = (0.008 * activeRaidNests)
delta = delta - val
else
delta = delta - 1
delta = delta - 0.5
end
if lostEnemyUnits > 0 then
local val = (0.001 * lostEnemyUnits)
local val = (0.04 * lostEnemyUnits)
if (currentTemperament > 0) then
delta = delta - val
else
delta = delta + val
end
else
if (currentTemperament < 0) then
delta = delta - 1
else
delta = delta + 1
end
end
if lostEnemyBuilding > 0 then
delta = delta + (1 * lostEnemyBuilding)
else
if (currentTemperament < 0) then
delta = delta - 1
else
delta = delta + 1
end
delta = delta + (20 * lostEnemyBuilding)
end
if (builtEnemyBuilding > 0) then
local val = (1 * builtEnemyBuilding)
local val = (50 * builtEnemyBuilding)
if (currentTemperament > 0) then
delta = delta - val
else
delta = delta + val
end
else
delta = delta - 1
delta = delta - 0.5
end
if (rocketLaunched > 0) then
local val = (1 * rocketLaunched)
local val = (100 * rocketLaunched)
delta = delta + val
end
if (ionCannonBlasts > 0) then
local val = (1 * ionCannonBlasts)
local val = (50 * ionCannonBlasts)
delta = delta + val
end
if (artilleryBlasts > 0) then
local val = (1 * artilleryBlasts)
local val = (50 * artilleryBlasts)
delta = delta + val
end
print(natives.activeNests, natives.activeRaidNests, natives.destroyPlayerBuildings, natives.lostEnemyUnits,
natives.lostEnemyBuilding, natives.rocketLaunched, natives.builtEnemyBuilding, natives.ionCannonBlasts,
natives.artilleryBlasts)
-- print(natives.activeNests, natives.activeRaidNests, natives.destroyPlayerBuildings, natives.lostEnemyUnits,
-- natives.lostEnemyBuilding, natives.rocketLaunched, natives.builtEnemyBuilding, natives.ionCannonBlasts,
-- natives.artilleryBlasts)
natives.destroyPlayerBuildings = 0
natives.lostEnemyUnits = 0
natives.lostEnemyBuilding = 0
@ -296,10 +342,10 @@ function aiPlanning.temperamentPlanner(natives)
natives.ionCannonBlasts = 0
natives.artilleryBlasts = 0
natives.temperamentScore = mMin(1000, mMax(-1000, currentTemperament + delta))
natives.temperament = (natives.temperamentScore + 1000) * 0.0005
print(natives.temperament, natives.temperamentScore)
print("--")
natives.temperamentScore = mMin(10000, mMax(-10000, currentTemperament + (natives.evolutionLevel * delta)))
natives.temperament = ((natives.temperamentScore + 10000) * 0.00005)
-- print(natives.temperament, natives.temperamentScore)
-- print("--")
end
aiPlanningG = aiPlanning

View File

@ -82,7 +82,7 @@ local mRandom = math.random
local function evoToTier(natives, evolutionFactor)
local v
for i=10,1,-1 do
for i=10,1,-1 do
if natives.evoToTierMapping[i] <= evolutionFactor then
v = i
if mRandom() <= 0.65 then
@ -136,40 +136,48 @@ end
local function initialEntityUpgrade(baseAlignment, tier, maxTier, natives, useHiveType)
local evolutionTable = natives.buildingEvolveLookup
local entity
for t=maxTier,tier,-1 do
local upgrades = evolutionTable[baseAlignment][t]
if upgrades then
if useHiveType then
for ui=1,#upgrades do
local upgrade = upgrades[ui]
if upgrade[3] == useHiveType then
entity = upgrade[2][mRandom(#upgrade[2])]
if mRandom() < 0.45 then
break
end
end
local useTier
local tierRoll = mRandom()
if (tierRoll < 0.4) then
useTier = maxTier
elseif (tierRoll < 0.7) then
useTier = mMax(maxTier - 1, tier)
elseif (tierRoll < 0.9) then
useTier = mMax(maxTier - 2, tier)
else
useTier = mMax(maxTier - 3, tier)
end
local upgrades = evolutionTable[baseAlignment][useTier]
if upgrades then
if useHiveType then
for ui=1,#upgrades do
local upgrade = upgrades[ui]
if upgrade[3] == useHiveType then
entity = upgrade[2][mRandom(#upgrade[2])]
break
end
else
local roll = mRandom()
end
else
local roll = mRandom()
local initial = roll
for ui=1,#upgrades do
local upgrade = upgrades[ui]
for ui=1,#upgrades do
local upgrade = upgrades[ui]
roll = roll - upgrade[1]
roll = roll - upgrade[1]
if (roll <= 0) then
entity = upgrade[2][mRandom(#upgrade[2])]
if mRandom() < 0.45 then
break
end
end
if (roll <= 0) then
entity = upgrade[2][mRandom(#upgrade[2])]
break
end
end
end
end
return entity
end
@ -181,9 +189,9 @@ local function entityUpgrade(baseAlignment, tier, maxTier, originalEntity, nativ
for t=maxTier,tier,-1 do
local upgrades = evolutionTable[baseAlignment][t][buildingHiveTypeLookup[originalEntity.name]]
if upgrades then
if upgrades and (#upgrades > 0) then
entity = upgrades[mRandom(#upgrades)]
if mRandom() < 0.45 then
if mRandom() < 0.55 then
break
end
end
@ -204,15 +212,15 @@ local function findEntityUpgrade(baseAlignment, currentEvo, evoIndex, originalEn
if (tier > maxTier) then
return nil
end
if evolve then
local chunk = getChunkByPosition(natives.map, originalEntity.position)
local makeHive = (chunk ~= SENTINEL_IMPASSABLE_CHUNK) and (getResourceGenerator(natives.map, chunk) > 0) and (mRandom() < 0.3)
local makeHive = (chunk ~= SENTINEL_IMPASSABLE_CHUNK) and (getResourceGenerator(natives.map, chunk) > 0) and (mRandom() < 0.2)
return initialEntityUpgrade(baseAlignment, tier, maxTier, natives, (makeHive and "hive"))
else
return entityUpgrade(baseAlignment, tier, maxTier, originalEntity, natives)
end
end
end
local function findBaseInitialAlignment(natives, evoIndex)
@ -266,8 +274,8 @@ function baseUtils.upgradeEntity(entity, surface, baseAlignment, natives, disPos
evoIndex,
entity,
natives,
evolve)
evolve)
if spawnerName then
entity.destroy()
local name = natives.buildingSpaceLookup[spawnerName] or spawnerName
@ -490,7 +498,7 @@ function baseUtils.rebuildNativeTables(natives, surface, rg)
to pick given an evolution level.
evolutionTable is a table that given a faction allows the selection of a building
type based on the propabilities given. Once the the building type is selected given
type based on the propabilities given. Once the the building type is selected given
a faction, then the evolution decides what level of building to select
--]]
local factionAcceptRate = faction.acceptRate
@ -583,6 +591,7 @@ function baseUtils.rebuildNativeTables(natives, surface, rg)
end
end
end
end
baseUtilsG = baseUtils

View File

@ -5,13 +5,23 @@ local chunkPropertyUtils = {}
local constants = require("Constants")
local tRemove = table.remove
-- constants
-- imported functions
local RAIDING_MINIMUM_BASE_THRESHOLD = constants.RAIDING_MINIMUM_BASE_THRESHOLD
local PLAYER_PHEROMONE = constants.PLAYER_PHEROMONE
local BASE_PHEROMONE = constants.BASE_PHEROMONE
local MOVEMENT_GENERATOR_PERSISTANCE = constants.MOVEMENT_GENERATOR_PERSISTANCE
local CHUNK_ALL_DIRECTIONS = constants.CHUNK_ALL_DIRECTIONS
-- imported functions
local tRemove = table.remove
local mMin = math.min
local mMax = math.max
-- module code
function chunkPropertyUtils.getNestCount(map, chunk)
@ -271,5 +281,59 @@ function chunkPropertyUtils.addPlayerBaseGenerator(map, chunk, playerGenerator)
map.chunkToPlayerBase[chunk] = (map.chunkToPlayerBase[chunk] or 0) + playerGenerator
end
function chunkPropertyUtils.processNestActiveness(map, chunk, natives, surface)
local nests = chunkPropertyUtils.getNestCount(map, chunk)
if (nests > 0) then
local activeness = chunkPropertyUtils.getNestActiveness(map, chunk)
local raidActiveness = chunkPropertyUtils.getRaidNestActiveness(map, chunk)
if natives.attackUsePlayer and (chunk[PLAYER_PHEROMONE] > natives.attackPlayerThreshold) then
chunkPropertyUtils.setNestActiveness(map, chunk, mMin(activeness + 5, 20))
elseif (chunk[BASE_PHEROMONE] > 0) then
local position = map.position
if (surface.get_pollution(chunk) > 0) then
chunkPropertyUtils.setNestActiveness(map, chunk, mMin(activeness + 5, 20))
else
local x = chunk.x
local y = chunk.y
position.x = x + 32
position.y = y
if (surface.get_pollution(position) > 0) then
chunkPropertyUtils.setNestActiveness(map, chunk, mMin(activeness + 5, 20))
else
position.x = x - 32
if (surface.get_pollution(position) > 0) then
chunkPropertyUtils.setNestActiveness(map, chunk, mMin(activeness + 5, 20))
else
position.x = x
position.y = y - 32
if (surface.get_pollution(position) > 0) then
chunkPropertyUtils.setNestActiveness(map, chunk, mMin(activeness + 5, 20))
else
position.y = y + 32
if (surface.get_pollution(position) > 0) then
chunkPropertyUtils.setNestActiveness(map, chunk, mMin(activeness + 5, 20))
else
chunkPropertyUtils.setNestActiveness(map, chunk, activeness - 2)
if (chunk[BASE_PHEROMONE] > RAIDING_MINIMUM_BASE_THRESHOLD) then
chunkPropertyUtils.setRaidNestActiveness(map, chunk, mMin(raidActiveness + 3, 20))
else
chunkPropertyUtils.setRaidNestActiveness(map, chunk, raidActiveness - 1)
end
end
end
end
end
end
else
chunkPropertyUtils.setNestActiveness(map, chunk, activeness - 5)
chunkPropertyUtils.setRaidNestActiveness(map, chunk, raidActiveness - 5)
end
else
chunkPropertyUtils.setNestActiveness(map, chunk, 0)
chunkPropertyUtils.setRaidNestActiveness(map, chunk, 0)
end
end
chunkPropertyUtilsG = chunkPropertyUtils
return chunkPropertyUtils

View File

@ -72,6 +72,8 @@ local getTurretCount = chunkPropertyUtils.getTurretCount
local setRaidNestActiveness = chunkPropertyUtils.setRaidNestActiveness
local setNestActiveness = chunkPropertyUtils.setNestActiveness
local processNestActiveness = chunkPropertyUtils.processNestActiveness
local getEnemyStructureCount = chunkPropertyUtils.getEnemyStructureCount
local findNearbyBase = baseUtils.findNearbyBase
@ -409,7 +411,7 @@ function chunkUtils.colorChunk(x, y, tileType, surface)
surface.set_tiles(tiles, false)
end
function chunkUtils.registerEnemyBaseStructure(map, entity, base)
function chunkUtils.registerEnemyBaseStructure(map, entity, base, surface)
local entityType = entity.type
if ((entityType == "unit-spawner") or (entityType == "turret")) and (entity.force.name == "enemy") then
local overlapArray = getEntityOverlapChunks(map, entity)
@ -455,6 +457,7 @@ function chunkUtils.registerEnemyBaseStructure(map, entity, base)
if (chunk ~= SENTINEL_IMPASSABLE_CHUNK) then
setFunc(map, chunk, getFunc(map, chunk) + 1)
setChunkBase(map, chunk, base)
processNestActiveness(map, chunk, natives, surface)
end
end
end

View File

@ -60,7 +60,7 @@ constants.INTERVAL_MAP_PROCESS = (settings.startup["rampant-liteMode"].value and
constants.INTERVAL_SCAN = (settings.startup["rampant-liteMode"].value and 42) or 21
constants.INTERVAL_CHUNK = 17
constants.INTERVAL_LOGIC = 60
constants.INTERVAL_TEMPERAMENT = 60 * 360
constants.INTERVAL_TEMPERAMENT = 121
constants.INTERVAL_SQUAD = 41
constants.INTERVAL_RESQUAD = 101
constants.INTERVAL_BUILDERS = 300
@ -140,10 +140,10 @@ constants.BASE_AI_STATE_MUTATE = 3
constants.AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION = 0.5
constants.AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION = 3
-- constants.AI_MIN_STATE_DURATION = 7
-- constants.AI_MAX_STATE_DURATION = 17
constants.AI_MIN_STATE_DURATION = 0.2
constants.AI_MAX_STATE_DURATION = 0.2
constants.AI_MIN_STATE_DURATION = 7
constants.AI_MAX_STATE_DURATION = 17
-- constants.AI_MIN_STATE_DURATION = 0.2
-- constants.AI_MAX_STATE_DURATION = 0.2
constants.AI_MIN_TEMPERAMENT_DURATION = 25
constants.AI_MAX_TEMPERAMENT_DURATION = 32
@ -326,6 +326,66 @@ constants.UNIT_GROUP_MAX_SPEED_UP = 2
constants.UNIT_GROUP_MAX_SLOWDOWN = 1.0
constants.UNIT_GROUP_SLOWDOWN_FACTOR = 1.0
constants.CONVERSION_TABLE = {
"neutral",
"fire",
"nuclear",
"suicide",
"neutral",
"acid",
"fire",
"physical",
"laser",
"inferno",
"poison",
"troll",
"fast",
"neutral",
"neutral",
"neutral",
"energy-thief",
"electric",
"wasp",
nil,
"acid",
"acid",
"spawner",
"laser",
"inferno",
"suicide",
"acid",
"spawner"
}
constants.BASE_ALIGNMENT_NEUTRAL = 1
constants.BASE_ALIGNMENT_FIRE = 2
constants.BASE_ALIGNMENT_NUCLEAR = 3
constants.BASE_ALIGNMENT_SUICIDE = 4
constants.BASE_ALIGNMENT_INFEST = 5
constants.BASE_ALIGNMENT_ACID = 6
constants.BASE_ALIGNMENT_FIRE = 7
constants.BASE_ALIGNMENT_PHYSICAL = 8
constants.BASE_ALIGNMENT_LASER = 9
constants.BASE_ALIGNMENT_INFERNO = 10
constants.BASE_ALIGNMENT_POISON = 11
constants.BASE_ALIGNMENT_TROLL = 12
constants.BASE_ALIGNMENT_FAST = 13
constants.BASE_ALIGNMENT_WEB = 14
constants.BASE_ALIGNMENT_DECAYING = 15
constants.BASE_ALIGNMENT_UNDYING = 16
constants.BASE_ALIGNMENT_ENERGY_THIEF = 17
constants.BASE_ALIGNMENT_ELECTRIC = 18
constants.BASE_ALIGNMENT_WASP = 19
constants.BASE_ALIGNMENT_DEADZONE = 20
constants.BASE_ALIGNMENT_NE = 21
constants.BASE_ALIGNMENT_BOBS = 22
constants.BASE_ALIGNMENT_SPAWNER = 23
constants.BASE_ALIGNMENT_NE_BLUE = 24
constants.BASE_ALIGNMENT_NE_RED = 25
constants.BASE_ALIGNMENT_NE_YELLOW = 26
constants.BASE_ALIGNMENT_NE_GREEN = 27
constants.BASE_ALIGNMENT_NE_PINK = 28
-- sentinels
constants.SENTINEL_IMPASSABLE_CHUNK = {}
@ -484,13 +544,13 @@ constants.FACTION_SET[#constants.FACTION_SET+1] = {
majorResistances = {},
minorResistances = {},
attributes = {},
acceptRate = {2, 10, 0.005, 0.03},
acceptRate = {2, 10, 0.001, 0.0175},
drops = {"nilArtifact"},
buildSets = {
{"biter-spawner", 1, 10, 0.15, 0.3},
{"spitter-spawner", 1, 10, 0.15, 0.3},
{"turret", 1, 10, 0.8, 0.57},
{"hive", 4, 10, 0.005, 0.03}
{"hive", 2, 10, 0.002, 0.02}
}
}
}
@ -506,7 +566,7 @@ if settings.startup["rampant-acidEnemy"].value then
units = {
{
type = "biter",
attackAttributes = {"melee"},
attackAttributes = {"melee", "acidPool"},
name = "biter",
majorResistances = {"acid"},
minorResistances = {"poison"},
@ -563,14 +623,14 @@ if settings.startup["rampant-acidEnemy"].value then
name = "hive",
majorResistances = {"acid"},
minorResistances = {"poison"},
acceptRate = {2, 10, 0.005, 0.03},
acceptRate = {2, 10, 0.001, 0.0175},
attributes = {},
drops = {"greenArtifact"},
buildSets = {
{"biter-spawner", 1, 10, 0.15, 0.3},
{"spitter-spawner", 1, 10, 0.15, 0.3},
{"turret", 1, 10, 0.8, 0.57},
{"hive", 4, 10, 0.005, 0.03}
{"hive", 2, 10, 0.002, 0.02}
}
}
}
@ -639,13 +699,13 @@ if settings.startup["rampant-laserEnemy"].value then
name = "hive",
majorResistances = {"laser", "electric"},
attributes = {},
acceptRate = {2, 10, 0.005, 0.003},
acceptRate = {2, 10, 0.001, 0.0175},
drops = {"blueArtifact"},
buildSets = {
{"biter-spawner", 1, 10, 0.15, 0.3},
{"spitter-spawner", 1, 10, 0.15, 0.3},
{"turret", 1, 10, 0.8, 0.57},
{"hive", 4, 10, 0.005, 0.03}
{"hive", 2, 10, 0.002, 0.02}
}
}
}
@ -720,13 +780,13 @@ if settings.startup["rampant-fireEnemy"].value then
majorResistances = {"fire", "acid"},
minorResistances = {},
attributes = {},
acceptRate = {2, 10, 0.005, 0.03},
acceptRate = {2, 10, 0.001, 0.0175},
drops = {"redArtifact"},
buildSets = {
{"biter-spawner", 1, 10, 0.15, 0.3},
{"spitter-spawner", 1, 10, 0.15, 0.3},
{"turret", 1, 10, 0.8, 0.57},
{"hive", 4, 10, 0.005, 0.03}
{"hive", 2, 10, 0.002, 0.02}
}
}
}
@ -757,7 +817,7 @@ if settings.startup["rampant-infernoEnemy"].value then
name = "spitter-spawner",
majorResistances = {"acid", "fire"},
minorWeaknesses = {"poison"},
acceptRate = {1, 10, 0.3, 0.5},
acceptRate = {1, 10, 0.4, 0.6},
attributes = {},
drops = {"orangeArtifact"},
buildSets = {
@ -780,12 +840,12 @@ if settings.startup["rampant-infernoEnemy"].value then
majorResistances = {"fire", "acid"},
minorResistances = {},
attributes = {},
acceptRate = {2, 10, 0.005, 0.03},
acceptRate = {2, 10, 0.001, 0.0175},
drops = {"orangeArtifact"},
buildSets = {
{"spitter-spawner", 1, 10, 0.15, 0.3},
{"turret", 1, 10, 0.8, 0.57},
{"hive", 4, 10, 0.005, 0.03}
{"hive", 2, 10, 0.002, 0.02}
}
}
}
@ -795,7 +855,7 @@ end
if settings.startup["rampant-waspEnemy"].value then
constants.FACTION_SET[#constants.FACTION_SET+1] = {
type = "wasp",
tint = {r=0.9, g=0.8, b=0.9, a=1},
tint = {r=0.6, g=0.9, b=0.9, a=1},
tint2 = {r=0.85, g=0.85, b=0, a=1},
acceptRate = {3, 10, 0.1, 0.125},
evo = 0.2,
@ -827,7 +887,7 @@ if settings.startup["rampant-waspEnemy"].value then
type = "spitter-spawner",
name = "spitter-spawner",
attributes = {},
acceptRate = {1, 10, 0.3, 0.5},
acceptRate = {1, 10, 0.4, 0.6},
drops = {"purpleArtifact"},
buildSets = {
{"spitter", 1, 10}
@ -845,12 +905,12 @@ if settings.startup["rampant-waspEnemy"].value then
type = "hive",
name = "hive",
attributes = {},
acceptRate = {2, 10, 0.005, 0.03},
acceptRate = {2, 10, 0.001, 0.0175},
drops = {"purpleArtifact"},
buildSets = {
{"spitter-spawner", 1, 10, 0.15, 0.3},
{"turret", 1, 10, 0.8, 0.57},
{"hive", 4, 10, 0.005, 0.03}
{"hive", 2, 10, 0.002, 0.02}
}
}
}
@ -876,14 +936,14 @@ if settings.startup["rampant-spawnerEnemy"].value then
type = "drone",
attackAttributes = {"touch", "acid"},
name = "egg",
attributes = {"stationary", {"clusterDeath", "spawn"}},
attributes = {"stationary", "bigger", {"clusterDeath", "spawn"}},
drops = {}
},
{
type = "drone",
attackAttributes = {"touch", "acid"},
name = "worm-egg",
attributes = {"stationary", {"clusterDeath", "spawn"}},
attributes = {"stationary", "bigger", {"clusterDeath", "spawn"}},
drops = {}
},
{
@ -900,7 +960,7 @@ if settings.startup["rampant-spawnerEnemy"].value then
name = "spitter-spawner",
attributes = {},
drops = {"orangeArtifact"},
acceptRate = {1, 10, 0.3, 0.5},
acceptRate = {1, 10, 0.4, 0.6},
buildSets = {
{"spitter", 1, 10}
}
@ -917,12 +977,12 @@ if settings.startup["rampant-spawnerEnemy"].value then
type = "hive",
name = "hive",
attributes = {},
acceptRate = {2, 10, 0.005, 0.03},
acceptRate = {2, 10, 0.001, 0.0175},
drops = {"orangeArtifact"},
buildSets = {
{"spitter-spawner", 1, 10, 0.15, 0.3},
{"turret", 1, 10, 0.8, 0.57},
{"hive", 4, 10, 0.005, 0.03}
{"hive", 2, 10, 0.002, 0.02}
}
}
}
@ -953,7 +1013,7 @@ if settings.startup["rampant-electricEnemy"].value then
name = "biter-spawner",
majorResistances = {"electric"},
minorResistances = {"laser"},
acceptRate = {1, 10, 0.3, 0.5},
acceptRate = {1, 10, 0.4, 0.6},
attributes = {},
drops = {"blueArtifact"},
buildSets = {
@ -976,12 +1036,12 @@ if settings.startup["rampant-electricEnemy"].value then
majorResistances = {"electric"},
minorResistances = {"laser"},
attributes = {},
acceptRate = {2, 10, 0.005, 0.03},
acceptRate = {2, 10, 0.001, 0.0175},
drops = {"blueArtifact"},
buildSets = {
{"biter-spawner", 1, 10, 0.15, 0.3},
{"turret", 1, 10, 0.8, 0.57},
{"hive", 4, 10, 0.005, 0.03}
{"hive", 2, 10, 0.002, 0.02}
}
}
}
@ -1013,7 +1073,7 @@ if settings.startup["rampant-physicalEnemy"].value then
majorResistances = {"physical", "explosion"},
minorWeaknesses = {"laser", "electric"},
attributes = {"highHealth", "bigger"},
acceptRate = {1, 10, 0.3, 0.5},
acceptRate = {1, 10, 0.4, 0.6},
drops = {"redArtifact"},
buildSets = {
{"biter", 1, 10}
@ -1035,12 +1095,12 @@ if settings.startup["rampant-physicalEnemy"].value then
majorResistances = {"physical", "explosion"},
minorResistances = {"laser", "electric"},
attributes = {"highHealth", "bigger"},
acceptRate = {2, 10, 0.005, 0.03},
acceptRate = {2, 10, 0.001, 0.0175},
drops = {"redArtifact"},
buildSets = {
{"biter-spawner", 1, 10, 0.15, 0.3},
{"turret", 1, 10, 0.8, 0.57},
{"hive", 4, 10, 0.005, 0.03}
{"hive", 2, 10, 0.002, 0.02}
}
}
}
@ -1071,7 +1131,7 @@ if settings.startup["rampant-trollEnemy"].value then
name = "biter-spawner",
minorResistances = {"physical", "explosion"},
majorWeaknesses = {"fire"},
acceptRate = {1, 10, 0.3, 0.5},
acceptRate = {1, 10, 0.4, 0.6},
attributes = {"highestHealth", "bigger", "highestRegen"},
drops = {"greenArtifact"},
buildSets = {
@ -1094,12 +1154,12 @@ if settings.startup["rampant-trollEnemy"].value then
minorResistances = {"physical", "explosion"},
majorWeaknesses = {"fire"},
attributes = {"highestHealth", "bigger", "highRegen"},
acceptRate = {2, 10, 0.005, 0.03},
acceptRate = {2, 10, 0.001, 0.0175},
drops = {"greenArtifact"},
buildSets = {
{"biter-spawner", 1, 10, 0.15, 0.3},
{"turret", 1, 10, 0.8, 0.57},
{"hive", 4, 10, 0.005, 0.03}
{"hive", 2, 10, 0.002, 0.02}
}
}
}
@ -1133,7 +1193,7 @@ if settings.startup["rampant-poisonEnemy"].value then
majorResistances = {"poison"},
minorWeaknesses = {"electric", "explosion", "laser"},
attributes = {"poisonDeathCloud"},
acceptRate = {1, 10, 0.3, 0.5},
acceptRate = {1, 10, 0.4, 0.6},
drops = {"greenArtifact"},
buildSets = {
{"biter", 1, 10}
@ -1157,12 +1217,12 @@ if settings.startup["rampant-poisonEnemy"].value then
minorResistances = {"fire"},
minorWeaknesses = {"electric", "explosion", "laser"},
attributes = {},
acceptRate = {2, 10, 0.005, 0.03},
acceptRate = {2, 10, 0.001, 0.0175},
drops = {"greenArtifact"},
buildSets = {
{"biter-spawner", 1, 10, 0.15, 0.3},
{"turret", 1, 10, 0.8, 0.57},
{"hive", 4, 10, 0.005, 0.03}
{"hive", 2, 10, 0.002, 0.02}
}
}
}
@ -1172,8 +1232,8 @@ end
if settings.startup["rampant-suicideEnemy"].value then
constants.FACTION_SET[#constants.FACTION_SET+1] = {
type = "suicide",
tint = {r=1, g=1, b=1, a=1},
tint2 = {r=0.85, g=0.85, b=0, a=1},
tint = {r=0.8, g=0.8, b=0.8, a=1},
tint2 = {r=0.95, g=0.95, b=0, a=1},
acceptRate = {1, 10, 0.05, 0.15},
evo = 0.12,
units = {
@ -1193,7 +1253,7 @@ if settings.startup["rampant-suicideEnemy"].value then
name = "biter-spawner",
majorResistances = {"explosion"},
minorResistances = {"poison"},
acceptRate = {1, 10, 0.3, 0.5},
acceptRate = {1, 10, 0.4, 0.6},
attributes = {},
drops = {"yellowArtifact", "quickSpawning", "lowUnits"},
buildSets = {
@ -1216,12 +1276,12 @@ if settings.startup["rampant-suicideEnemy"].value then
majorResistances = {"explosion"},
minorResistances = {"poison"},
attributes = {},
acceptRate = {2, 10, 0.005, 0.03},
acceptRate = {2, 10, 0.001, 0.0175},
drops = {"yellowArtifact"},
buildSets = {
{"biter-spawner", 1, 10, 0.15, 0.3},
{"turret", 1, 10, 0.8, 0.57},
{"hive", 4, 10, 0.005, 0.03}
{"hive", 2, 10, 0.002, 0.02}
}
}
}
@ -1251,7 +1311,7 @@ if settings.startup["rampant-nuclearEnemy"].value then
name = "biter-spawner",
majorResistances = {"explosion"},
minorResistances = {"fire"},
acceptRate = {1, 10, 0.3, 0.5},
acceptRate = {1, 10, 0.4, 0.6},
attributes = {},
drops = {"yellowArtifact", "quickSpawning", "lowUnits"},
buildSets = {
@ -1274,12 +1334,12 @@ if settings.startup["rampant-nuclearEnemy"].value then
majorResistances = {"explosion"},
minorResistances = {"fire"},
attributes = {},
acceptRate = {2, 10, 0.005, 0.03},
acceptRate = {2, 10, 0.001, 0.0175},
drops = {"yellowArtifact"},
buildSets = {
{"biter-spawner", 1, 10, 0.15, 0.3},
{"turret", 1, 10, 0.8, 0.57},
{"hive", 4, 10, 0.005, 0.03}
{"hive", 2, 10, 0.002, 0.02}
}
}
}
@ -1310,7 +1370,7 @@ if settings.startup["rampant-energyThiefEnemy"].value then
name = "biter-spawner",
majorResistances = {"electric", "laser"},
minorResistances = {},
acceptRate = {1, 10, 0.3, 0.5},
acceptRate = {1, 10, 0.4, 0.6},
attributes = {},
drops = {"blueArtifact"},
buildSets = {
@ -1332,12 +1392,12 @@ if settings.startup["rampant-energyThiefEnemy"].value then
name = "hive",
majorResistances = {"electric", "laser"},
attributes = {},
acceptRate = {2, 10, 0.005, 0.03},
acceptRate = {2, 10, 0.001, 0.0175},
drops = {"blueArtifact"},
buildSets = {
{"biter-spawner", 1, 10, 0.15, 0.3},
{"turret", 1, 10, 0.8, 0.57},
{"hive", 4, 10, 0.005, 0.03}
{"hive", 2, 10, 0.002, 0.02}
}
}
}
@ -1412,13 +1472,13 @@ if settings.startup["rampant-fastEnemy"].value then
majorResistances = {},
minorResistances = {"explosion"},
attributes = {"quickSpawning"},
acceptRate = {2, 10, 0.005, 0.03},
acceptRate = {2, 10, 0.001, 0.0175},
drops = {"purpleArtifact"},
buildSets = {
{"biter-spawner", 1, 10, 0.15, 0.3},
{"spitter-spawner", 1, 10, 0.15, 0.3},
{"turret", 1, 10, 0.8, 0.57},
{"hive", 4, 10, 0.005, 0.03}
{"hive", 2, 10, 0.002, 0.02}
}
}
}

View File

@ -35,7 +35,7 @@ local AI_VENGENCE_SQUAD_COST = constants.AI_VENGENCE_SQUAD_COST
local AI_SETTLER_COST = constants.AI_SETTLER_COST
local AI_STATE_AGGRESSIVE = constants.AI_STATE_AGGRESSIVE
local RAIDING_MINIMUM_BASE_THRESHOLD = constants.RAIDING_MINIMUM_BASE_THRESHOLD
local processNestActiveness = chunkPropertyUtils.processNestActiveness
local MOVEMENT_PHEROMONE = constants.MOVEMENT_PHEROMONE
local PLAYER_PHEROMONE = constants.PLAYER_PHEROMONE
@ -161,34 +161,6 @@ function mapProcessor.processMap(map, surface, tick)
end
end
local function processNestActiveness(map, chunk, natives, surface)
local nests = getNestCount(map, chunk)
if (nests > 0) then
local activeness = getNestActiveness(map, chunk)
local raidActiveness = getRaidNestActiveness(map, chunk)
if natives.attackUsePlayer and (chunk[PLAYER_PHEROMONE] > natives.attackPlayerThreshold) then
setNestActiveness(map, chunk, mMin(activeness + 5, 20))
elseif (chunk[BASE_PHEROMONE] > 0) then
if (surface.get_pollution(chunk) > 0) then
setNestActiveness(map, chunk, mMin(activeness + 5, 20))
else
setNestActiveness(map, chunk, activeness - 2)
if (chunk[BASE_PHEROMONE] > RAIDING_MINIMUM_BASE_THRESHOLD) then
setRaidNestActiveness(map, chunk, mMin(raidActiveness + 3, 20))
else
setRaidNestActiveness(map, chunk, raidActiveness - 1)
end
end
else
setNestActiveness(map, chunk, activeness - 5)
setRaidNestActiveness(map, chunk, raidActiveness - 5)
end
else
setNestActiveness(map, chunk, 0)
setRaidNestActiveness(map, chunk, 0)
end
end
--[[
Localized player radius were processing takes place in realtime, doesn't store state
between calls.

File diff suppressed because it is too large Load Diff

View File

@ -13,6 +13,7 @@ local biterUtils = require("utils/BiterUtils")
local particleUtils = require("utils/ParticleUtils")
local stickerUtils = require("utils/StickerUtils")
local unitUtils = require("utils/UnitUtils")
local fireUtils = require("utils/FireUtils")
local constants = require("__Rampant__/libs/Constants")
local mathUtils = require("__Rampant__/libs/MathUtils")
@ -47,6 +48,7 @@ local createAttackBall = acidBall.createAttackBall
local createRangedAttack = biterUtils.createRangedAttack
local createMeleeAttack = biterUtils.createMeleeAttack
local makeUnitAlienLootTable = biterUtils.makeUnitAlienLootTabl
local makeAcidSplashFire = fireUtils.makeAcidSplashFire
local makeWormAlienLootTable = biterUtils.makeWormAlienLootTable
local makeUnitAlienLootTable = biterUtils.makeUnitAlienLootTable
@ -154,37 +156,44 @@ local biterAttributeNumeric = {
["radius"] = { 0.5, 0.65, 0.75, 0.85, 0.95, 1.1, 1.2, 1.3, 1.4, 1.5 },
["cooldown"] = { 40, 41, 42, 44, 46, 48, 50, 52, 55, 57 },
["damage"] = { 7, 15, 22.5, 35, 45, 60, 75, 90, 150, 200 },
["scale"] = { 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8 },
["scale"] = { 0.25, 0.40, 0.60, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8 },
["healing"] = { 0.01, 0.01, 0.015, 0.02, 0.05, 0.075, 0.1, 0.12, 0.14, 0.16 },
["physicalDecrease"] = { 0, 0, 4, 5, 6, 8, 11, 13, 16, 17 },
["physicalPercent"] = { 0, 0, 0, 10, 12, 12, 14, 16, 18, 20 },
["explosionDecrease"] = { 0, 0, 0, 0, 0, 10, 12, 14, 16, 20 },
["explosionPercent"] = { 0, 0, 0, 10, 12, 13, 15, 16, 17, 20 },
["distancePerFrame"] = { 0.1, 0.125, 0.15, 0.19, 0.195, 0.2, 0.2, 0.2, 0.2, 0.2 },
-- ["distancePerFrame"] = { 0.1, 0.125, 0.15, 0.19, 0.195, 0.2, 0.2, 0.2, 0.2, 0.2 },
["distancePerFrame"] = { 0.08, 0.10, 0.125, 0.15, 0.18, 0.195, 0.2, 0.2, 0.2, 0.2 },
["movement"] = { 0.2, 0.19, 0.185, 0.18, 0.175, 0.17, 0.17, 0.17, 0.17, 0.17 },
["health"] = { 15, 75, 150, 250, 1000, 2000, 3500, 7500, 15000, 30000 },
["pollutionToAttack"] = { 200, 750, 1200, 1750, 2500, 5000, 10000, 12500, 15000, 20000 },
["spawningTimeModifer"] = { 1, 1, 1, 2, 3, 7, 10, 10, 12, 12 }
}
local acidPuddleAttributeNumeric = {
["damagePerTick"] = { 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5 },
["stickerDamagePerTick"] = { 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5 },
["stickerDuration"] = { 600, 610, 620, 630, 640, 650, 660, 670, 680, 690 }
}
local spitterAttributeNumeric = {
["range"] = { 13, 13, 14, 14, 15, 15, 16, 16, 17, 17 },
["radius"] = { 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.5 },
["cooldown"] = { 100, 100, 97, 97, 95, 95, 93, 93, 90, 90 },
["stickerDuration"] = { 600, 610, 620, 630, 640, 650, 660, 670, 680, 690 },
["damagePerTick"] = { 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1 },
-- ["stickerDamagePerTick"] = { 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1 },
["stickerDamagePerTick"] = { 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5 },
["stickerMovementModifier"] = { 0.8, 0.7, 0.6, 0.55, 0.50, 0.45, 0.40, 0.35, 0.30, 0.25 },
["damage"] = { 16, 30, 45, 60, 90, 110, 130, 150, 170, 190 },
["particleVerticalAcceleration"] = { 0.01, 0.01, 0.02, 0.02, 0.03, 0.03, 0.04, 0.04, 0.05, 0.05 },
["particleHoizontalSpeed"] = { 0.6, 0.6, 0.7, 0.7, 0.8, 0.8, 0.9, 0.9, 1, 1 },
["particleHoizontalSpeedDeviation"] = { 0.0025, 0.0025, 0.0024, 0.0024, 0.0023, 0.0023, 0.0022, 0.0022, 0.0021, 0.0021 },
["scale"] = { 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8 },
["scale"] = { 0.25, 0.40, 0.60, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8 },
["healing"] = { 0.01, 0.01, 0.015, 0.02, 0.05, 0.075, 0.1, 0.12, 0.14, 0.16 },
["physicalDecrease"] = { 0, 0, 0, 0, 2, 4, 6, 8, 10, 12 },
["physicalPercent"] = { 0, 0, 0, 10, 12, 12, 14, 14, 15, 15 },
["explosionPercent"] = { 0, 0, 10, 10, 20, 20, 30, 30, 40, 40 },
["distancePerFrame"] = { 0.04, 0.045, 0.050, 0.055, 0.060, 0.065, 0.070, 0.075, 0.08, 0.084 },
["distancePerFrame"] = { 0.04, 0.045, 0.050, 0.055, 0.060, 0.065, 0.067, 0.069, 0.071, 0.073 },
["movement"] = { 0.185, 0.18, 0.18, 0.17, 0.17, 0.16, 0.16, 0.15, 0.15, 0.14 },
["health"] = { 10, 50, 200, 350, 1250, 2250, 3250, 6500, 12500, 25000 },
["pollutionToAttack"] = { 200, 750, 1200, 1750, 2500, 5000, 10000, 12500, 15000, 20000 },
@ -192,7 +201,7 @@ local spitterAttributeNumeric = {
}
local droneAttributeNumeric = {
["scale"] = { 0.5, 0.5, 0.6, 0.6, 0.7, 0.7, 0.8, 0.8, 0.9, 0.9 },
["scale"] = { 0.3, 0.32, 0.34, 0.36, 0.4, 0.42, 0.44, 0.5, 0.52, 0.54 },
["particleVerticalAcceleration"] = { 0.01, 0.01, 0.02, 0.02, 0.03, 0.03, 0.04, 0.04, 0.05, 0.05 },
["particleHoizontalSpeed"] = { 0.6, 0.6, 0.7, 0.7, 0.8, 0.8, 0.9, 0.9, 1, 1 },
["particleHoizontalSpeedDeviation"] = { 0.0025, 0.0025, 0.0024, 0.0024, 0.0023, 0.0023, 0.0022, 0.0022, 0.0021, 0.0021 },
@ -203,7 +212,7 @@ local droneAttributeNumeric = {
["ttl"] = { 300, 300, 350, 350, 400, 400, 450, 450, 500, 500 },
["damage"] = { 2, 4, 7, 13, 15, 18, 22, 28, 35, 40 },
["movement"] = { 0.06, 0.06, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 0.1 },
["distancePerFrame"] = { 0.08, 0.08, 0.085, 0.085, 0.09, 0.09, 0.092, 0.092, 0.094, 0.094 },
["distancePerFrame"] = { 0.1, 0.1, 0.105, 0.105, 0.110, 0.110, 0.112, 0.112, 0.114, 0.114 },
["rangeFromPlayer"] = { 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 },
["range"] = { 10, 10, 11, 11, 12, 12, 13, 13, 14, 14 },
["radius"] = { 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.5 },
@ -258,8 +267,9 @@ local wormAttributeNumeric = {
["range"] = { 25, 27, 31, 33, 35, 36, 37, 38, 39, 40 },
["cooldown"] = { 70, 70, 68, 66, 64, 62, 60, 58, 56, 54 },
["damage"] = { 36, 45, 85, 135, 155, 175, 195, 215, 235, 255 },
["scale"] = { 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8 },
["scale"] = { 0.25, 0.40, 0.60, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8 },
["radius"] = { 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.2, 2.3, 2.5, 3.0 },
["stickerDamagePerTick"] = { 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5 },
["particleVerticalAcceleration"] = { 0.01, 0.01, 0.02, 0.02, 0.03, 0.03, 0.04, 0.04, 0.05, 0.05 },
["particleHoizontalSpeed"] = { 0.6, 0.6, 0.7, 0.7, 0.8, 0.8, 0.9, 0.9, 1, 1 },
["particleHoizontalSpeedDeviation"] = { 0.0025, 0.0025, 0.0024, 0.0024, 0.0023, 0.0023, 0.0022, 0.0022, 0.0021, 0.0021 },
@ -530,7 +540,7 @@ local function fillEntityTemplate(entity)
entity["cooldown"] = entity["cooldown"] * 0.85
elseif (attribute == "slowMovement") then
entity["movement"] = entity["movement"] * 0.35
entity["distancePerFrame"] = entity["distancePerFrame"] * 0.85
entity["distancePerFrame"] = entity["distancePerFrame"] * 0.65
elseif (attribute == "quickMovement") then
entity["movement"] = entity["movement"] * 1.05
entity["distancePerFrame"] = entity["distancePerFrame"] * 1.15
@ -694,7 +704,7 @@ function swarmUtils.buildUnits(template)
target_effects =
{
type = "create-entity",
entity_name = unit.explosion
entity_name = "massive-explosion"
}
}
}
@ -856,6 +866,18 @@ local function buildAttack(faction, template)
local attack = template.attackAttributes[i]
if (attack == "melee") then
template.attackGenerator = createMeleeAttack
elseif (attack == "acidPool") then
template.addon[#template.addon+1] = acidPuddleAttributeNumeric
template.meleePuddleGenerator = function (attributes)
attributes.stickerDamagePerTickType = "acid"
return {
type="create-fire",
entity_name = makeAcidSplashFire(attributes, attributes.stickerName or makeSticker(attributes)),
check_buildability = true,
initial_ground_flame_count = 2,
show_in_tooltip = true
}
end
elseif (attack == "spit") then
template.attackType = "projectile"
-- template.attackDirectionOnly = true

View File

@ -100,14 +100,17 @@ function generateLocal()
for i=1,#HIVE_BUILDINGS_TYPES do
print("entity-proxy-" .. HIVE_BUILDINGS_TYPES[i] .. "-t" .. t .. "-rampant=" .. HIVE_BUILDINGS_NAMES[i] .. ": " .. sizes[t] .. " class")
end
local size = sizes[t]
local size = sizes[t]
for v = 1, 20 do
print("neutral-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. size .. " class")
print("neutral-spitter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter: " .. size .. " class")
print("neutral-biter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. size .. " class")
print("neutral-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter nest: " .. size .. " class")
print("neutral-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. size .. " class")
print("neutral-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. size .. " class")
print("neutral-spitter-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. size .. " class")
print("neutral-worm-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. size .. " class")
end
end
@ -116,11 +119,6 @@ function generateLocal()
for t = 1, 10 do
local size = sizes[t]
for i=1,#HIVE_BUILDINGS_TYPES do
local hbt = HIVE_BUILDINGS_TYPES[i]
print("entity-proxy-acid-" .. hbt .. "-t" .. t .. "-rampant=" .. name .. " " .. HIVE_BUILDING_NAME_MAP[hbt] .. ": " .. size .. " class")
end
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")
@ -128,6 +126,9 @@ function generateLocal()
print("acid-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. size .. " class")
print("acid-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter nest: " .. size .. " class")
print("acid-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. size .. " class")
print("acid-spitter-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. size .. " class")
print("acid-worm-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. size .. " class")
print("acid-biter-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. size .. " class")
end
end
@ -152,7 +153,6 @@ function generateLocal()
print("electric-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. size .. " class")
print("electric-biter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. size .. " class")
print("electric-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. size .. " class")
end
end
@ -161,10 +161,11 @@ function generateLocal()
for t = 1, 10 do
local size = sizes[t]
for v = 1, 20 do
print("suicide-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. size .. " class")
print("suicide-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. size .. " class")
print("suicide-biter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. size .. " class")
print("suicide-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. size .. " class")
print("suicide-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. size .. " class")
print("suicide-worm-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. size .. " class")
end
end
@ -173,10 +174,11 @@ function generateLocal()
for t = 1, 10 do
local size = sizes[t]
for v = 1, 20 do
print("nuclear-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. size .. " class")
print("nuclear-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. size .. " class")
print("nuclear-biter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. size .. " class")
print("nuclear-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. size .. " class")
print("nuclear-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. size .. " class")
print("nuclear-worm-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. size .. " class")
end
end
@ -185,12 +187,13 @@ function generateLocal()
for t = 1, 10 do
local size = sizes[t]
for v = 1, 20 do
print("fire-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. size .. " class")
print("fire-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. size .. " class")
print("fire-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. size .. " class")
print("fire-spitter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter: " .. size .. " class")
print("fire-biter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. size .. " class")
print("fire-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter nest: " .. size .. " class")
print("fire-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. size .. " class")
print("fire-worm-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. size .. " class")
end
end
@ -231,6 +234,8 @@ function generateLocal()
print("fast-biter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. size .. " class")
print("fast-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter nest: " .. size .. " class")
print("fast-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. size .. " class")
print("fast-spitter-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. size .. " class")
print("fast-worm-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. size .. " class")
end
end
@ -254,11 +259,13 @@ function generateLocal()
local size = sizes[t]
for v = 1, 20 do
print("wasp-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. size .. " class")
print("wasp-drone-v" .. v .. "-t" .. t .. "-drone-rampant=" .. name .. ": " .. size .. " class")
print("wasp-wasp-v" .. v .. "-t" .. t .. "-drone-rampant=" .. name .. ": " .. size .. " class")
print("wasp-spitter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter: " .. size .. " class")
print("wasp-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter nest: " .. size .. " class")
print("wasp-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. size .. " class")
print("wasp-worm-drone-v" .. v .. "-t" .. t .. "-drone-rampant=" .. name .. ": " .. size .. " class")
print("wasp-wasp-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. size .. " class")
print("wasp-worm-wasp-v" .. v .. "-t" .. t .. "-drone-rampant=Wasp: " .. size .. " class")
end
end
@ -267,13 +274,17 @@ function generateLocal()
for t = 1, 10 do
local size = sizes[t]
for v = 1, 20 do
print("spawner-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. size .. " class")
print("spawner-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. size .. " class")
print("spawner-drone-v" .. v .. "-t" .. t .. "-drone-rampant=" .. name .. " eggs: " .. size .. " class")
print("spawner-spitter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter: " .. size .. " class")
print("spawner-worm-drone-v" .. v .. "-t" .. t .. "-drone-rampant=" .. name .. " eggs: " .. size .. " class")
print("spawner-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. size .. " class")
print("spawner-worm-egg-v" .. v .. "-t" .. t .. "-drone-rampant=" .. name .. " eggs: " .. size .. " class")
print("spawner-worm-egg-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. size .. " class")
print("spawner-spawn-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. size .. " class")
print("spawner-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter nest: " .. size .. " class")
print("spawner-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. size .. " class")
print("spawner-spitter-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. size .. " class")
print("spawner-egg-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. size .. " class")
print("spawner-egg-v" .. v .. "-t" .. t .. "-drone-rampant=" .. name .. " egg: " .. size .. " class")
end
end

View File

@ -299,7 +299,7 @@ function biterFunctions.makeSpitter(attributes)
alternative_attacking_frame_sequence = spitter_alternative_attacking_animation_sequence(),
corpse = makeSpitterCorpse(attributes),
dying_explosion = attributes.explosion,
enemy_map_color = attributes.tint2,
enemy_map_color = attributes.tint2,
dying_trigger_effect = attributes.dyingEffect,
dying_sound = make_spitter_dying_sounds(0.3 + (0.05 * attributes.effectiveLevel)),
working_sound = make_biter_calls(0.2 + (0.05 * attributes.effectiveLevel)),
@ -319,7 +319,7 @@ function biterFunctions.makeUnitSpawner(attributes)
v.type = k
resistances[#resistances+1] = v
end
-- print(attributes.name)
-- print(attributes.name)
local o = {
type = "unit-spawner",
name = attributes.name .. "-rampant",
@ -860,6 +860,18 @@ function biterFunctions.createProjectileAttack(attributes, projectile, animation
end
function biterFunctions.createMeleeAttack(attackAttributes)
local meleeAttackEffects = {
type = "damage",
damage = { amount = attackAttributes.damage * 0.25, type = attackAttributes.damageType or "physical" }
}
if attackAttributes.meleePuddleGenerator then
local o = {}
o[1] = meleeAttackEffects
o[2] = attackAttributes.meleePuddleGenerator(attackAttributes)
meleeAttackEffects = o
end
return {
type = "projectile",
range = attackAttributes.range or 0.5,
@ -890,11 +902,7 @@ function biterFunctions.createMeleeAttack(attackAttributes)
action_delivery =
{
type = "instant",
target_effects =
{
type = "damage",
damage = { amount = attackAttributes.damage * 0.25, type = attackAttributes.damageType or "physical" }
}
target_effects = meleeAttackEffects
}
}
}

View File

@ -10,7 +10,7 @@ function droneUtils.makeDrone(attributes)
resistances[#resistances+1] = v
end
-- attributes.name = name
local drone = {
type = "combat-robot",
name = n,
@ -41,22 +41,23 @@ function droneUtils.makeDrone(attributes)
priority = "high",
line_length = 16,
width = 32,
tint = attributes.tint or {r=1.0, g=0.0, b=0.0},
tint = attributes.tint2,
height = 33,
frame_count = 1,
direction_count = 16,
shift = {0, 0.015625},
scale = attributes.scale,
hr_version = {
filename = "__base__/graphics/entity/defender-robot/hr-defender-robot.png",
priority = "high",
line_length = 16,
width = 56,
height = 59,
tint = attributes.tint or {r=1.0, g=0.0, b=0.0},
tint = attributes.tint2,
frame_count = 1,
direction_count = 16,
shift = util.by_pixel(0, 0.25),
scale = 0.5
scale = attributes.scale * 0.5
}
},
{
@ -65,23 +66,24 @@ function droneUtils.makeDrone(attributes)
line_length = 16,
width = 18,
height = 16,
tint = attributes.tint2 or {r=1.0, g=0.0, b=0.0},
tint = attributes.tint2,
frame_count = 1,
direction_count = 16,
shift = {0, -0.125},
apply_runtime_tint = true,
-- apply_runtime_tint = true,
scale = attributes.scale,
hr_version = {
filename = "__base__/graphics/entity/defender-robot/hr-defender-robot-mask.png",
priority = "high",
line_length = 16,
width = 28,
height = 21,
tint = attributes.tint2 or {r=1.0, g=0.0, b=0.0},
tint = attributes.tint2,
frame_count = 1,
direction_count = 16,
shift = util.by_pixel(0, -4.75),
apply_runtime_tint = true,
scale = 0.5
-- apply_runtime_tint = true,
scale = attributes.scale * 0.5
}
},
}
@ -96,6 +98,7 @@ function droneUtils.makeDrone(attributes)
frame_count = 1,
direction_count = 16,
shift = {0.859375, 0.609375},
scale = attributes.scale,
hr_version = {
filename = "__base__/graphics/entity/defender-robot/hr-defender-robot-shadow.png",
priority = "high",
@ -105,7 +108,7 @@ function droneUtils.makeDrone(attributes)
frame_count = 1,
direction_count = 16,
shift = util.by_pixel(25.5, 19),
scale = 0.5
scale = attributes.scale * 0.5
}
},
in_motion =
@ -117,26 +120,25 @@ function droneUtils.makeDrone(attributes)
priority = "high",
line_length = 16,
width = 32,
tint = attributes.tint or {r=1.0, g=0.0, b=0.0},
tint = attributes.tint,
height = 33,
frame_count = 1,
tint = attributes.tint,
direction_count = 16,
shift = {0, 0.015625},
y = 33,
scale = attributes.scale,
hr_version = {
filename = "__base__/graphics/entity/defender-robot/hr-defender-robot.png",
priority = "high",
line_length = 16,
width = 56,
tint = attributes.tint or {r=1.0, g=0.0, b=0.0},
tint = attributes.tint,
height = 59,
frame_count = 1,
tint = attributes.tint,
direction_count = 16,
shift = util.by_pixel(0, 0.25),
y = 59,
scale = 0.5
scale = attributes.scale * 0.5
}
},
{
@ -149,8 +151,8 @@ function droneUtils.makeDrone(attributes)
direction_count = 16,
tint = attributes.tint2,
shift = {0, -0.125},
apply_runtime_tint = true,
y = 16,
scale = attributes.scale,
hr_version = {
filename = "__base__/graphics/entity/defender-robot/hr-defender-robot-mask.png",
priority = "high",
@ -161,9 +163,8 @@ function droneUtils.makeDrone(attributes)
direction_count = 16,
tint = attributes.tint2,
shift = util.by_pixel(0, -4.75),
apply_runtime_tint = true,
y = 21,
scale = 0.5
scale = attributes.scale * 0.5
}
},
}
@ -176,20 +177,19 @@ function droneUtils.makeDrone(attributes)
width = 43,
height = 23,
frame_count = 1,
tint = attributes.tint,
direction_count = 16,
shift = {0.859375, 0.609375},
scale = attributes.scale,
hr_version = {
filename = "__base__/graphics/entity/defender-robot/hr-defender-robot-shadow.png",
priority = "high",
line_length = 16,
width = 88,
height = 50,
tint = attributes.tint,
frame_count = 1,
direction_count = 16,
shift = util.by_pixel(25.5, 19),
scale = 0.5
scale = attributes.scale * 0.5
}
}
}
@ -249,7 +249,8 @@ function droneUtils.createCapsuleProjectile(attributes, entityName)
frame_count = 1,
width = 28,
height = 20,
tint = attributes.tint,
tint = attributes.tint2,
scale = attributes.scale,
priority = "high"
},
{
@ -259,8 +260,8 @@ function droneUtils.createCapsuleProjectile(attributes, entityName)
width = 28,
height = 20,
tint = attributes.tint2,
scale = attributes.scale,
priority = "high",
apply_runtime_tint = true,
},
},
},
@ -271,6 +272,7 @@ function droneUtils.createCapsuleProjectile(attributes, entityName)
frame_count = 1,
width = 26,
height = 20,
scale = attributes.scale,
priority = "high"
},
smoke = {

View File

@ -32,9 +32,9 @@ function stickerUtils.makeSticker(attributes)
},
duration_in_ticks = attributes.stickerDuration or (30 * 60),
target_movement_modifier_from = attributes.stickerMovementModifier,
target_movement_modifier_from = attributes.stickerMovementModifier or 1,
target_movement_modifier_to = 1,
vehicle_speed_modifier_from = attributes.stickerMovementModifier,
vehicle_speed_modifier_from = attributes.stickerMovementModifier or 1,
vehicle_speed_modifier_to = 1,
vehicle_friction_modifier_from = 1.5,
vehicle_friction_modifier_to = 1,

View File

@ -292,28 +292,28 @@ local function armoredDieBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-04.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-05.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-06.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-07.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-08.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-09.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-10.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-11.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-12.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-13.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-14.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-15.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-16.png"
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-01.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-02.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-03.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-04.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-05.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-06.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-07.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-08.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-09.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-10.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-11.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-12.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-13.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-14.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-15.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-16.png"
},
slice = 4,
lines_per_file = 4,
line_length = 4,
width = 280,
height = 200,
width = 238,
height = 170,
frame_count = 16,
direction_count = 16,
shift= {0,0},
@ -323,28 +323,28 @@ local function armoredDieBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-04.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-05.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-06.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-07.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-08.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-09.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-10.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-11.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-12.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-13.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-14.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-15.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-16.png"
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-01.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-02.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-03.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-04.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-05.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-06.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-07.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-08.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-09.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-10.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-11.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-12.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-13.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-14.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-15.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-16.png"
},
slice = 4,
lines_per_file = 4,
line_length = 4,
width = 560,
height = 400,
width = 476,
height = 340,
frame_count = 16,
shift = {0,0},
direction_count = 16,
@ -354,29 +354,29 @@ local function armoredDieBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-04.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-05.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-06.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-07.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-08.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-09.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-10.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-11.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-12.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-13.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-14.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-15.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-16.png"
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-01.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-02.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-03.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-04.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-05.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-06.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-07.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-08.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-09.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-10.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-11.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-12.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-13.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-14.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-15.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-16.png"
},
slice = 4,
lines_per_file = 4,
flags = { "mask" },
line_length = 4,
width = 280,
height = 200,
width = 238,
height = 170,
frame_count = 16,
direction_count = 16,
shift = {0,0},
@ -386,28 +386,28 @@ local function armoredDieBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-04.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-05.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-06.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-07.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-08.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-09.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-10.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-11.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-12.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-13.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-14.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-15.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-16.png"
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-01.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-02.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-03.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-04.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-05.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-06.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-07.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-08.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-09.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-10.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-11.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-12.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-13.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-14.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-15.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-16.png"
},
slice = 4,
lines_per_file = 4,
line_length = 4,
width = 560,
height = 400,
width = 476,
height = 340,
frame_count = 16,
shift = {0,0},
direction_count = 16,
@ -418,29 +418,29 @@ local function armoredDieBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-04.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-05.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-06.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-07.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-08.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-09.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-10.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-11.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-12.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-13.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-14.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-15.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-16.png"
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-01.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-02.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-03.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-04.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-05.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-06.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-07.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-08.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-09.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-10.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-11.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-12.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-13.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-14.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-15.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-16.png"
},
slice = 4,
lines_per_file = 4,
flags = { "mask" },
line_length = 4,
width = 280,
height = 200,
width = 238,
height = 170,
frame_count = 16,
direction_count = 16,
shift = {0,0},
@ -450,28 +450,28 @@ local function armoredDieBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-04.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-05.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-06.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-07.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-08.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-09.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-10.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-11.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-12.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-13.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-14.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-15.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-16.png"
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-01.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-02.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-03.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-04.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-05.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-06.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-07.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-08.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-09.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-10.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-11.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-12.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-13.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-14.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-15.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-16.png"
},
slice = 4,
lines_per_file = 4,
line_length = 4,
width = 560,
height = 400,
width = 476,
height = 340,
frame_count = 16,
shift = {0,0},
direction_count = 16,
@ -482,28 +482,28 @@ local function armoredDieBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-04.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-05.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-06.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-07.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-08.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-09.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-10.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-11.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-12.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-13.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-14.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-15.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-16.png"
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-01.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-02.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-03.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-04.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-05.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-06.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-07.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-08.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-09.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-10.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-11.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-12.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-13.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-14.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-15.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-16.png"
},
slice = 4,
lines_per_file = 4,
line_length = 4,
width = 280,
height = 200,
width = 238,
height = 170,
frame_count = 16,
shift = {0,0},
direction_count = 16,
@ -513,28 +513,28 @@ local function armoredDieBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-04.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-05.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-06.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-07.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-08.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-09.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-10.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-11.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-12.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-13.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-14.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-15.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-16.png"
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-01.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-02.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-03.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-04.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-05.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-06.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-07.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-08.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-09.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-10.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-11.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-12.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-13.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-14.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-15.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-16.png"
},
slice = 4,
lines_per_file = 4,
line_length = 4,
width = 560,
height = 400,
width = 476,
height = 340,
frame_count = 16,
shift = {0,0},
direction_count = 16,
@ -727,16 +727,16 @@ local function armoredAttackBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-attack-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-attack-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-attack-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-attack-04.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-01.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-02.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-03.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-04.png",
},
slice = 11,
lines_per_file = 4,
line_length = 16,
width = 280,
height = 200,
width = 238,
height = 170,
frame_count = 11,
direction_count = 16,
animation_speed = 0.4,
@ -747,16 +747,16 @@ local function armoredAttackBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-04.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-01.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-02.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-03.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-04.png",
},
slice = 11,
lines_per_file = 4,
line_length = 16,
width = 560,
height = 400,
width = 476,
height = 340,
frame_count = 11,
shift = {0,0},
direction_count = 16,
@ -767,17 +767,17 @@ local function armoredAttackBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask1-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask1-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask1-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask1-04.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask1-01.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask1-02.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask1-03.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask1-04.png",
},
slice = 11,
lines_per_file = 4,
flags = { "mask" },
line_length = 16,
width = 280,
height = 200,
width = 238,
height = 170,
frame_count = 11,
direction_count = 16,
animation_speed = 0.4,
@ -788,16 +788,16 @@ local function armoredAttackBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask1-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask1-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask1-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask1-04.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask1-01.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask1-02.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask1-03.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask1-04.png",
},
slice = 11,
lines_per_file = 4,
line_length = 16,
width = 560,
height = 400,
width = 476,
height = 340,
frame_count = 11,
shift = {0,0},
direction_count = 16,
@ -809,17 +809,17 @@ local function armoredAttackBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask2-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask2-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask2-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask2-04.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask2-01.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask2-02.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask2-03.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask2-04.png",
},
slice = 11,
lines_per_file = 4,
flags = { "mask" },
line_length = 16,
width = 280,
height = 200,
width = 238,
height = 170,
frame_count = 11,
direction_count = 16,
animation_speed = 0.4,
@ -830,16 +830,16 @@ local function armoredAttackBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask2-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask2-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask2-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask2-04.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask2-01.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask2-02.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask2-03.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask2-04.png",
},
slice = 11,
lines_per_file = 4,
line_length = 16,
width = 560,
height = 400,
width = 476,
height = 340,
frame_count = 11,
shift = {0,0},
direction_count = 16,
@ -851,16 +851,16 @@ local function armoredAttackBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-attack-shadow-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-attack-shadow-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-attack-shadow-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-attack-shadow-04.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-shadow-01.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-shadow-02.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-shadow-03.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-shadow-04.png",
},
slice = 11,
lines_per_file = 4,
line_length = 16,
width = 280,
height = 200,
width = 238,
height = 170,
frame_count = 11,
shift = {0,0},
direction_count = 16,
@ -871,16 +871,16 @@ local function armoredAttackBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-shadow-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-shadow-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-shadow-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-shadow-04.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-shadow-01.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-shadow-02.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-shadow-03.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-shadow-04.png",
},
slice = 11,
lines_per_file = 4,
line_length = 16,
width = 560,
height = 400,
width = 476,
height = 340,
frame_count = 11,
shift = {0,0},
direction_count = 16,
@ -901,16 +901,16 @@ local function armoredRunBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-run-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-run-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-run-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-run-04.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-01.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-02.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-03.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-04.png",
},
slice = 8,
lines_per_file = 8,
line_length = 8,
width = 280,
height = 200,
width = 238,
height = 170,
frame_count = 16,
direction_count = 16,
shift = {0,0},
@ -920,16 +920,16 @@ local function armoredRunBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-04.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-01.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-02.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-03.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-04.png",
},
slice = 8,
lines_per_file = 8,
line_length = 8,
width = 560,
height = 400,
width = 476,
height = 340,
frame_count = 16,
shift = {0,0},
direction_count = 16,
@ -939,17 +939,17 @@ local function armoredRunBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-run-mask1-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-run-mask1-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-run-mask1-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-run-mask1-04.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask1-01.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask1-02.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask1-03.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask1-04.png",
},
slice = 8,
lines_per_file = 8,
flags = { "mask" },
line_length = 8,
width = 280,
height = 200,
width = 238,
height = 170,
frame_count = 16,
direction_count = 16,
shift = {0,0},
@ -959,16 +959,16 @@ local function armoredRunBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask1-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask1-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask1-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask1-04.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask1-01.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask1-02.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask1-03.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask1-04.png",
},
slice = 8,
lines_per_file = 8,
line_length = 8,
width = 560,
height = 400,
width = 476,
height = 340,
frame_count = 16,
shift = {0,0},
direction_count = 16,
@ -979,17 +979,17 @@ local function armoredRunBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-run-mask2-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-run-mask2-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-run-mask2-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-run-mask2-04.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask2-01.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask2-02.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask2-03.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask2-04.png",
},
slice = 8,
lines_per_file = 8,
flags = { "mask" },
line_length = 8,
width = 280,
height = 200,
width = 238,
height = 170,
frame_count = 16,
direction_count = 16,
shift = {0,0},
@ -999,16 +999,16 @@ local function armoredRunBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask2-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask2-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask2-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask2-04.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask2-01.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask2-02.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask2-03.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask2-04.png",
},
slice = 8,
lines_per_file = 8,
line_length = 8,
width = 560,
height = 400,
width = 476,
height = 340,
frame_count = 16,
shift = {0,0},
direction_count = 16,
@ -1019,16 +1019,16 @@ local function armoredRunBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-run-shadow-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-run-shadow-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-run-shadow-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/LowRes/armoured-biter-run-shadow-04.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-shadow-01.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-shadow-02.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-shadow-03.png",
"__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-shadow-04.png",
},
slice = 8,
lines_per_file = 8,
line_length = 8,
width = 280,
height = 200,
width = 238,
height = 170,
frame_count = 16,
shift = {0,0},
direction_count = 16,
@ -1038,16 +1038,16 @@ local function armoredRunBiter(scale, tint1, tint2)
{
filenames =
{
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-shadow-01.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-shadow-02.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-shadow-03.png",
"__CybranM_ArmouredBiter__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-shadow-04.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-shadow-01.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-shadow-02.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-shadow-03.png",
"__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-shadow-04.png",
},
slice = 8,
lines_per_file = 8,
line_length = 8,
width = 560,
height = 400,
width = 476,
height = 340,
frame_count = 16,
shift = {0,0},
direction_count = 16,
@ -1225,7 +1225,7 @@ local function vanillaRunBiter(scale, tint1, tint2)
end
function unitUtils.biterdieanimation(scale, tint1, tint2, altBiter)
if (altBiter == "armored") and mods["CybranM_ArmouredBiter"] then
if (altBiter == "armored") and mods["ArmouredBiters"] then
return armoredDieBiter(scale, tint1, tint2)
else
return vanillaDieBiter(scale, tint1, tint2)
@ -1233,7 +1233,7 @@ function unitUtils.biterdieanimation(scale, tint1, tint2, altBiter)
end
function unitUtils.biterattackanimation(scale, tint1, tint2, altBiter)
if (altBiter == "armored") and mods["CybranM_ArmouredBiter"] then
if (altBiter == "armored") and mods["ArmouredBiters"] then
return armoredAttackBiter(scale, tint1, tint2)
else
return vanillaAttackBiter(scale, tint1, tint2)
@ -1242,7 +1242,7 @@ end
function unitUtils.biterrunanimation(scale, tint1, tint2, altBiter)
if (altBiter == "armored") and mods["CybranM_ArmouredBiter"] then
if (altBiter == "armored") and mods["ArmouredBiters"] then
return armoredRunBiter(scale, tint1, tint2)
else
return vanillaRunBiter(scale, tint1, tint2)

View File

@ -423,36 +423,6 @@ data:extend({
per_user = false
},
{
type = "bool-setting",
name = "rampant-siegeAIToggle",
setting_type = "runtime-global",
default_value = true,
order = "m[total]-d[ai]",
per_user = false
},
{
type = "bool-setting",
name = "rampant-onslaughtAIToggle",
setting_type = "runtime-global",
default_value = true,
order = "m[total]-e[ai]",
per_user = false
},
{
type = "double-setting",
name = "rampant-aiAggressiveness",
description = "rampant-aiAggressiveness",
setting_type = "runtime-global",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 2.0,
order = "m[total]-f[ai]",
per_user = false
},
{
type = "bool-setting",
name = "rampant-removeBloodParticles",

View File

@ -210,7 +210,8 @@ function tests.registeredNest(x)
local entity = tests.createEnemy(x)
chunk.registerEnemyBaseStructure(global.map,
entity,
nil)
nil,
game.surfaces[global.natives.activeSurface])
end
function tests.attackOrigin()