1
0
mirror of https://github.com/veden/Rampant.git synced 2024-12-26 20:54:12 +02:00

see changelog

This commit is contained in:
Aaron Veden 2018-05-19 13:16:16 -07:00
parent de18246bcf
commit 7f6b8c8cc7
9 changed files with 404 additions and 39 deletions

View File

@ -217,10 +217,10 @@ function upgrade.attempt(natives)
game.surfaces[1].print("Rampant - Version 0.16.22")
global.version = constants.VERSION_57
end
if (global.version < constants.VERSION_59) then
if (global.version < constants.VERSION_60) then
game.surfaces[1].print("Rampant - Version 0.16.24")
global.version = constants.VERSION_59
game.surfaces[1].print("Rampant - Version 0.16.25")
global.version = constants.VERSION_60
end

View File

@ -1,3 +1,15 @@
---------------------------------------------------------------------------------------------------
Version: 0.16.25
Date: 5. 19. 2018
Improvements:
- Configuration options for scaling biter, spitter, worm, and nests stats by a scaler.
Optimizations:
- Switched passScore per chunk calculation to use the mutli filter query instead of individual calls for tile counts
Bugfixes:
- Changed how mod settings are set in memory to prevent missing unit crashes (https://forums.factorio.com/viewtopic.php?f=190&t=31445&start=320#p362819)
- Cleaned up NE and Bobs detection
- Fixed locale typo in deadZoneFrequency description from with to without(https://forums.factorio.com/viewtopic.php?f=190&t=31445&start=320#p363436)
---------------------------------------------------------------------------------------------------
Version: 0.16.24
Date: 4. 14. 2018

View File

@ -29,6 +29,8 @@ local INTERVAL_SCAN = constants.INTERVAL_SCAN
local INTERVAL_SQUAD = constants.INTERVAL_SQUAD
local INTERVAL_SPAWNER = constants.INTERVAL_SPAWNER
local WATER_TILE_NAMES = constants.WATER_TILE_NAMES
local MOVEMENT_PHEROMONE = constants.MOVEMENT_PHEROMONE
local SENTINEL_IMPASSABLE_CHUNK = constants.SENTINEL_IMPASSABLE_CHUNK
@ -218,8 +220,8 @@ local function rebuildMap()
map.filteredEntitiesWormQueryLimited = { area=map.area2, force="enemy", type="turret" }
map.filteredEntitiesPlayerQuery = { area=map.area, force="player" }
map.canPlaceQuery = { name="", position={0,0} }
map.filteredTilesQuery = { name="", area=map.area }
map.filteredTilesQuery = { name=WATER_TILE_NAMES, area=map.area }
map.attackAreaCommand = {
type = DEFINES_COMMAND_ATTACK_AREA,
destination = map.position,
@ -250,7 +252,7 @@ end
local function onModSettingsChange(event)
if event and (string.sub(event.setting, 1, 7) ~= "rampant") then
if event and ((string.sub(event.setting, 1, 7) ~= "rampant") or (string.sub(event.setting, 1, 18) == "rampant-arsenal")) then
return false
end
@ -302,7 +304,8 @@ end
local function onConfigChanged()
local upgraded
upgraded, natives = upgrade.attempt(natives)
if upgraded and onModSettingsChange(nil) then
onModSettingsChange(nil)
if upgraded then
rebuildMap()
-- clear pending chunks, will be added when loop runs below

View File

@ -1,10 +1,10 @@
{
"name" : "Rampant",
"factorio_version" : "0.16",
"version" : "0.16.24",
"version" : "0.16.25",
"title" : "Rampant",
"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 nonhoming blockable biter projectiles. Adds new Enemies (disabled by default). Can completely replace the vanilla AI. Difficulty setting in mod options menu.",
"dependencies" : ["base >= 0.16.24", "? bobenemies", "? Natural_Evolution_Enemies", "? Clockwork", "? Orbital Ion Cannon"]
"dependencies" : ["base >= 0.16.43", "? bobenemies", "? Natural_Evolution_Enemies", "? Clockwork", "? Orbital Ion Cannon"]
}

View File

@ -10,8 +10,6 @@ local chunkPropertyUtils = require("ChunkPropertyUtils")
-- constants
local WATER_TILE_NAMES = constants.WATER_TILE_NAMES
local DEFINES_DIRECTION_EAST = defines.direction.east
local DEFINES_WIRE_TYPE_RED = defines.wire_type.red
local DEFINES_WIRE_TYPE_GREEN = defines.wire_type.green
@ -43,8 +41,6 @@ local PATH_RATING = constants.PATH_RATING
local PASSABLE = constants.PASSABLE
local RESOURCE_NORMALIZER = constants.RESOURCE_NORMALIZER
-- imported functions
local isRampant = stringUtils.isRampant
@ -199,15 +195,7 @@ end
-- external functions
function chunkUtils.calculatePassScore(surface, map)
local count_tiles_filtered = surface.count_tiles_filtered
local filteredTilesQuery = map.filteredTilesQuery
local passScore = 0
for i=1,#WATER_TILE_NAMES do
filteredTilesQuery.name = WATER_TILE_NAMES[i]
passScore = passScore + count_tiles_filtered(filteredTilesQuery)
end
local passScore = surface.count_tiles_filtered(map.filteredTilesQuery)
return 1 - (passScore * 0.0009765625)
end

View File

@ -21,7 +21,7 @@ constants.VERSION_41 = 41
constants.VERSION_44 = 44
constants.VERSION_51 = 51
constants.VERSION_57 = 57
constants.VERSION_59 = 59
constants.VERSION_60 = 60
-- misc
@ -201,11 +201,11 @@ constants.BASE_ALIGNMENT_EVOLUTION_BASELINE = {
[constants.BASE_ALIGNMENT_NUCLEAR] = 0.7
}
local option = settings.startup["NE_Difficulty"]
constants.ENABLED_NE_UNITS = settings.startup["rampant-enableNEUnits"].value and (option and option.value)
local detectNE = settings.startup["NE_Difficulty"]
constants.ENABLED_NE_UNITS = settings.startup["rampant-enableNEUnits"].value and detectNE
option = settings.startup["bobmods-enemies-enableartifacts"]
constants.ENABLED_BOBS_UNITS = settings.startup["rampant-enableBobsUnits"].value and (option and option.value)
local detectBobs = settings.startup["bobmods-enemies-enableartifacts"]
constants.ENABLED_BOBS_UNITS = settings.startup["rampant-enableBobsUnits"].value and detectBobs
if constants.ENABLED_BOBS_UNITS then

View File

@ -11045,6 +11045,26 @@ rampant-forceOldProjectiles=Force non-blockable projectiles
rampant-disableVanillaAI=AI: Disable Vanilla AI
rampant-enableMigration=AI: Enable Migration
rampant-unitBiterHealthScaler=Biter Health Scaler
rampant-unitBiterSpeedScaler=Biter Speed Scaler
rampant-unitBiterDamageScaler=Biter Damage Scaler
rampant-unitBiterRangeScaler=Biter Range Scaler
rampant-unitSpitterHealthScaler=Spitter Health Scaler
rampant-unitSpitterSpeedScaler=Spitter Speed Scaler
rampant-unitSpitterDamageScaler=Spitter Damage Scaler
rampant-unitSpitterRangeScaler=Spitter Range Scaler
rampant-unitDroneHealthScaler=Drone Health Scaler
rampant-unitDroneSpeedScaler=Drone Speed Scaler
rampant-unitDroneDamageScaler=Drone Damage Scaler
rampant-unitDroneRangeScaler=Drone Range Scaler
rampant-unitWormHealthScaler=Worm Health Scaler
rampant-unitWormDamageScaler=Worm Damage Scaler
rampant-unitWormRangeScaler=Worm Range Scaler
rampant-unitSpawnerHealthScaler=Unit Spawner Health Scaler
rampant-unitSpawnerOwnedScaler=Unit Spawner Owned Count Scaler
rampant-unitSpawnerSpawnScaler=Unit Spawner Spawn Count Scaler
rampant-unitSpawnerRespawnScaler=Unit Spawner Respawn Rate Scaler
[mod-setting-description]
rampant-useDumbProjectiles=Turns off homing projectiles for worms and spitters
rampant-useNEUnitLaunchers=ONLY FOR USE WITH NATURAL EVOLUTION ENEMIES use the NE unit launchers with medium and big worms. if set to false this will still allow the dumb projectiles but without the unit spawning. A side effect of the dumb projectiles cause the units to be spawned as if two shots were fired
@ -11072,7 +11092,7 @@ rampant-enableSwarm=This reduces the size of the unit collision_mask causing the
rampant-attack-warning=Shows a message warning players that an attack wave is incoming
rampant-newEnemies=Adds news enemies that will be dispersed over the world. This increases the RAM requirements minimum 2GB to 8GB.
rampant-enemySeed=The seed that powers all of the unit generation, so change this if you want the enemy stats to change
rampant-deadZoneFrequency=The percentage of zones that start out with worms or nests
rampant-deadZoneFrequency=The percentage of zones that start without worms or nests
rampant-newEnemyNestVariations=This number corresponds to the number of variations per tier. The higher the number the smoother the enemy power curve. Min 1, Max 20
rampant-newEnemyNestTiers=This number corresponds to number of tiers. The higher the number the smoother the enemy power curve.
rampant-newEnemyWormVariations=This number corresponds to the number of variations per tier. The higher the number the smoother the enemy power curve. Min 1, Max 20
@ -11086,4 +11106,24 @@ rampant-tierStart=This is the starting tier level and increases linearly to the
rampant-tierEnd=This is the ending tier level that is reached after increasing linearly from the start tier for as many tiers selected. min 1, max 10
rampant-forceOldProjectiles=This causes projectiles to no longer impact into other entities
rampant-disableVanillaAI=This will turn off the vanilla attack waves and the vanilla biter expansion.
rampant-enableMigration=This will allow the ai to expand its worms and nests. Respects the map settings for biter expansion.
rampant-enableMigration=This will allow the ai to expand its worms and nests. Respects the map settings for biter expansion.
rampant-unitBiterHealthScaler=Scales by a percentage all new enemy biter health
rampant-unitBiterSpeedScaler=Scales by a percentage all new enemy biter speed
rampant-unitBiterDamageScaler=Scales by a percentage all new enemy biter damage
rampant-unitBiterRangeScaler=Scales by a percentage all new enemy biter attack range
rampant-unitSpitterHealthScaler=Scales by a percentage all new enemy spitter health
rampant-unitSpitterSpeedScaler=Scales by a percentage all new enemy spitter speed
rampant-unitSpitterDamageScaler=Scales by a percentage all new enemy spitter damage
rampant-unitSpitterRangeScaler=Scales by a percentage all new enemy spitter range
rampant-unitDroneHealthScaler=Scales by a percentage all new enemy drone health. Drones come from the factions spawner and wasp.
rampant-unitDroneSpeedScaler=Scales by a percentage all new enemy drone speed. Drones come from the factions spawner and wasp.
rampant-unitDroneDamageScaler=Scales by a percentage all new enemy drone damage. Drones come from the factions spawner and wasp.
rampant-unitDroneRangeScaler=Scales by a percentage all new enemy drone range. Drones come from the factions spawner and wasp.
rampant-unitWormHealthScaler=Scales by a percentage all new enemy worm health
rampant-unitWormDamageScaler=Scales by a percentage all new enemy worm damage
rampant-unitWormRangeScaler=Scales by a percentage all new enemy worm range
rampant-unitSpawnerHealthScaler=Scales by a percentage all new enemy nest health
rampant-unitSpawnerOwnedScaler=Scales by a percentage all new enemy nest max number of units controlled per spawner
rampant-unitSpawnerSpawnScaler=Scales by a percentage all new enemy nest number of units spawned at any one time
rampant-unitSpawnerRespawnScaler=Scales by a percentage all new enemy nest time to spawn new units

View File

@ -129,6 +129,100 @@ local function unitSetToProbabilityTable(upgradeTable, unitSet)
return result
end
local function scaleAttributes (upgrade, entity)
if (upgrade.type == "attribute") then
if (entity.type == "biter") then
if (upgrade.name == "health") then
entity.attributes[upgrade.name] = entity.attributes[upgrade.name] * settings.startup["rampant-unitBiterHealthScaler"].value
end
if (upgrade.name == "movement") then
entity.attributes[upgrade.name] = entity.attributes[upgrade.name] * settings.startup["rampant-unitBiterSpeedScaler"].value
end
if (upgrade.name == "distancePerFrame") then
entity.attributes[upgrade.name] = entity.attributes[upgrade.name] * settings.startup["rampant-unitBiterSpeedScaler"].value
end
elseif (entity.type == "spitter") then
if (upgrade.name == "health") then
entity.attributes[upgrade.name] = entity.attributes[upgrade.name] * settings.startup["rampant-unitSpitterHealthScaler"].value
end
if (upgrade.name == "movement") then
entity.attributes[upgrade.name] = entity.attributes[upgrade.name] * settings.startup["rampant-unitSpitterSpeedScaler"].value
end
if (upgrade.name == "distancePerFrame") then
entity.attributes[upgrade.name] = entity.attributes[upgrade.name] * settings.startup["rampant-unitSpitterSpeedScaler"].value
end
elseif (entity.type == "drone") then
if (upgrade.name == "health") then
entity.attributes[upgrade.name] = entity.attributes[upgrade.name] * settings.startup["rampant-unitDroneHealthScaler"].value
end
if (upgrade.name == "movement") then
entity.attributes[upgrade.name] = entity.attributes[upgrade.name] * settings.startup["rampant-unitDroneSpeedScaler"].value
end
if (upgrade.name == "distancePerFrame") then
entity.attributes[upgrade.name] = entity.attributes[upgrade.name] * settings.startup["rampant-unitDroneSpeedScaler"].value
end
elseif (entity.type == "spawner") then
if (upgrade.name == "health") then
entity.attributes[upgrade.name] = entity.attributes[upgrade.name] * settings.startup["rampant-unitSpawnerHealthScaler"].value
end
if (upgrade.name == "unitsOwned") then
entity.attributes[upgrade.name] = entity.attributes[upgrade.name] * settings.startup["rampant-unitSpawnerOwnedScaler"].value
end
if (upgrade.name == "unitsToSpawn") then
entity.attributes[upgrade.name] = entity.attributes[upgrade.name] * settings.startup["rampant-unitSpawnerSpawnScaler"].value
end
if (upgrade.name == "spawingCooldownStart") then
entity.attributes[upgrade.name] = entity.attributes[upgrade.name] * settings.startup["rampant-unitSpawnerRespawnScaler"].value
end
if (upgrade.name == "spawingCooldownEnd") then
entity.attributes[upgrade.name] = entity.attributes[upgrade.name] * settings.startup["rampant-unitSpawnerRespawnScaler"].value
end
elseif (entity.type == "worm") then
if (upgrade.name == "health") then
entity.attributes[upgrade.name] = entity.attributes[upgrade.name] * settings.startup["rampant-unitWormHealthScaler"].value
end
end
end
if (upgrade.type == "resistance") then
-- not asked for
end
if (upgrade.type == "attack") then
if (entity.type == "biter") then
if (upgrade.name == "damage") then
entity.attack[upgrade.name] = entity.attack[upgrade.name] * settings.startup["rampant-unitBiterDamageScaler"].value
end
if (upgrade.name == "range") then
entity.attack[upgrade.name] = entity.attack[upgrade.name] * settings.startup["rampant-unitBiterRangeScaler"].value
end
elseif (entity.type == "spitter") then
if (upgrade.name == "damage") then
entity.attack[upgrade.name] = entity.attack[upgrade.name] * settings.startup["rampant-unitSpitterDamageScaler"].value
end
if (upgrade.name == "stickerDamagePerTick") then
entity.attack[upgrade.name] = entity.attack[upgrade.name] * settings.startup["rampant-unitSpitterDamageScaler"].value
end
if (upgrade.name == "range") then
entity.attack[upgrade.name] = entity.attack[upgrade.name] * settings.startup["rampant-unitSpitterRangeScaler"].value
end
elseif (entity.type == "drone") then
if (upgrade.name == "damage") then
entity.attack[upgrade.name] = entity.attack[upgrade.name] * settings.startup["rampant-unitDroneDamageScaler"].value
end
if (upgrade.name == "range") then
entity.attack[upgrade.name] = entity.attack[upgrade.name] * settings.startup["rampant-unitDroneRangeScaler"].value
end
elseif (entity.type == "worm") then
if (upgrade.name == "damage") then
entity.attack[upgrade.name] = entity.attack[upgrade.name] * settings.startup["rampant-unitWormDamageScaler"].value
end
if (upgrade.name == "range") then
entity.attack[upgrade.name] = entity.attack[upgrade.name] * settings.startup["rampant-unitWormRangeScaler"].value
end
end
end
end
local function upgradeEntity(entity, upgradeTable, tier)
if upgradeTable then
for upgradeIndex=1, #upgradeTable do
@ -149,6 +243,7 @@ local function upgradeEntity(entity, upgradeTable, tier)
adj = roundToNearest(gaussianRandomRangeRG(adj, adj * 0.2, min, max, xorRandom), 0.001)
entity.attributes[upgrade.name] = (entity.attributes[upgrade.name] or 0) + adj
end
scaleAttributes(upgrade, entity)
end
if (upgrade.type == "resistance") then
local field = upgrade.name
@ -196,6 +291,7 @@ local function upgradeEntity(entity, upgradeTable, tier)
adj = roundToNearest(gaussianRandomRangeRG(adj, adj * 0.2, min, max, xorRandom), 0.001)
entity.attack[upgrade.name] = (entity.attack[upgrade.name] or 0) + adj
end
scaleAttributes(upgrade, entity)
end
end
end
@ -284,8 +380,8 @@ function swarmUtils.buildUnits(template, attackGenerator, upgradeTable, variatio
if unit.loot then
unit.attributes.loot = { unit.loot[ut] }
end
end
local entity
if (unit.type == "spitter") then
unit.attributes.corpse = makeSpitterCorpse(unit)
@ -334,6 +430,7 @@ function swarmUtils.buildUnitSpawner(templates, upgradeTable, attackGenerator, v
local unitTable = unitSetToProbabilityTable(upgradeTable.probabilityTable,
unitSet)
generateApperance(unitSpawner, ut)
unitSpawner.type = "spawner"
upgradeEntity(unitSpawner, upgradeTable.unitSpawner, ut)
if unitSpawner.loot then
@ -363,6 +460,7 @@ function swarmUtils.buildWorm(template, upgradeTable, attackGenerator, variation
local worm = deepcopy(template)
worm.name = worm.name .. "-v" .. i .. "-t" .. t
generateApperance(worm, ut)
worm.type = "worm"
upgradeEntity(worm, upgradeTable, ut)
if worm.attackName then

View File

@ -202,7 +202,7 @@ data:extend({
per_user = false
},
{
{
type = "bool-setting",
name = "rampant-disallowFriendlyFire",
setting_type = "startup",
@ -224,11 +224,6 @@ data:extend({
per_user = false
},
{
type = "bool-setting",
name = "rampant-newEnemies",
@ -360,7 +355,6 @@ data:extend({
per_user = false
},
{
type = "bool-setting",
name = "rampant-disableVanillaAI",
@ -399,5 +393,235 @@ data:extend({
default_value = true,
order = "o[modifer]-a[message]",
per_user = true
}
},
{
type = "double-setting",
name = "rampant-unitBiterHealthScaler",
description = "rampant-unitBiterHealthScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-a[unit]",
per_user = false
},
{
type = "double-setting",
name = "rampant-unitBiterSpeedScaler",
description = "rampant-unitBiterSpeedScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-b[unit]",
per_user = false
},
{
type = "double-setting",
name = "rampant-unitBiterDamageScaler",
description = "rampant-unitBiterDamageScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-c[unit]",
per_user = false
},
{
type = "double-setting",
name = "rampant-unitBiterRangeScaler",
description = "rampant-unitBiterRangeScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-d[unit]",
per_user = false
},
{
type = "double-setting",
name = "rampant-unitSpitterHealthScaler",
description = "rampant-unitSpitterHealthScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-e[unit]",
per_user = false
},
{
type = "double-setting",
name = "rampant-unitSpitterSpeedScaler",
description = "rampant-unitSpitterSpeedScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-f[unit]",
per_user = false
},
{
type = "double-setting",
name = "rampant-unitSpitterDamageScaler",
description = "rampant-unitSpitterDamageScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-g[unit]",
per_user = false
},
{
type = "double-setting",
name = "rampant-unitSpitterRangeScaler",
description = "rampant-unitSpitterRangeScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-h[unit]",
per_user = false
},
{
type = "double-setting",
name = "rampant-unitDroneHealthScaler",
description = "rampant-unitDroneHealthScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-i[unit]",
per_user = false
},
{
type = "double-setting",
name = "rampant-unitDroneSpeedScaler",
description = "rampant-unitDroneSpeedScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-j[unit]",
per_user = false
},
{
type = "double-setting",
name = "rampant-unitDroneDamageScaler",
description = "rampant-unitDroneDamageScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-k[unit]",
per_user = false
},
{
type = "double-setting",
name = "rampant-unitDroneRangeScaler",
description = "rampant-unitDroneRangeScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-l[unit]",
per_user = false
},
{
type = "double-setting",
name = "rampant-unitWormHealthScaler",
description = "rampant-unitWormHealthScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-m[unit]",
per_user = false
},
{
type = "double-setting",
name = "rampant-unitWormDamageScaler",
description = "rampant-unitWormDamageScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-n[unit]",
per_user = false
},
{
type = "double-setting",
name = "rampant-unitWormRangeScaler",
description = "rampant-unitWormRangeScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-o[unit]",
per_user = false
},
{
type = "double-setting",
name = "rampant-unitSpawnerHealthScaler",
description = "rampant-unitSpawnerHealthScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-p[unit]",
per_user = false
},
{
type = "double-setting",
name = "rampant-unitSpawnerOwnedScaler",
description = "rampant-unitSpawnerOwnedScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-q[unit]",
per_user = false
},
{
type = "double-setting",
name = "rampant-unitSpawnerSpawnScaler",
description = "rampant-unitSpawnerSpawnScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-r[unit]",
per_user = false
},
{
type = "double-setting",
name = "rampant-unitSpawnerRespawnScaler",
description = "rampant-unitSpawnerRespawnScaler",
setting_type = "startup",
default_value = 1.0,
minimum_value = 0.0,
maximum_value = 100000.0,
order = "p[modifier]-r[unit]",
per_user = false
}
})