Commit ec1df030 authored by Rob Nelson's avatar Rob Nelson
Browse files

Updated mods

parent 236eb4bd
"startup": {
"ion-cannon-radius": {
"value": 25
"ion-cannon-heatup-multiplier": {
"value": 2
"ion-cannon-laser-damage": {
"value": 2500
"ion-cannon-explosion-damage": {
"value": 1000
"ion-cannon-flames": {
"value": true
"ion-cannon-bob-updates": {
"value": true
"rampant-useDumbProjectiles": {
"value": true
"rampant-useNEUnitLaunchers": {
"value": true
"angels-enable-icon-scaling-silos": {
"value": false
"angels-infinite-ores-yield": {
"value": 20
......@@ -174,6 +195,12 @@
"bobmods-mining-waterminers": {
"value": true
"replace-electronics": {
"value": true
"replace-warfare": {
"value": true
"bobmods-modules-enablegodmodules": {
"value": false
......@@ -339,12 +366,18 @@
"bobmods-plates-cheapersteel": {
"value": true
"bobmods-plates-groundwater": {
"value": false
"bobmods-plates-inventorysize": {
"value": 60
"bobmods-plates-oreoverride": {
"value": true
"bobmods-plates-purewater": {
"value": false
"bobmods-vehicleequipment-enablevehiclegrids": {
"value": true
......@@ -359,6 +392,18 @@
"runtime-global": {
"ion-cannon-auto-targeting": {
"value": true
"ion-cannon-target-worms": {
"value": true
"ion-cannon-auto-target-visible": {
"value": true
"ion-cannon-cooldown-seconds": {
"value": 300
"rampant-attackWaveGenerationUsePollution": {
"value": true
......@@ -368,12 +413,12 @@
"rampant-attackWaveGenerationThresholdMin": {
"value": 0
"rampant-attackPlayerThreshold": {
"value": 7
"rampant-attackWaveGenerationThresholdMax": {
"value": 20
"rampant-attackPlayerThreshold": {
"value": 7
"rampant-attackWaveMaxSize": {
"value": 150
......@@ -398,6 +443,12 @@
"rampant-safeBuildings-trainStops": {
"value": true
"rampant-permanentNocturnal": {
"value": false
"rampant-aiPointsScaler": {
"value": 1
"weed-radius": {
"value": 2
......@@ -440,6 +491,15 @@
"rso-enemy-base-size": {
"value": 1
"rso-distance-exponent": {
"value": 1.1
"rso-fluid-distance-exponent": {
"value": 0.6
"rso-size-exponent": {
"value": 0.2
"rso-use-donuts": {
"value": false
......@@ -456,5 +516,21 @@
"value": true
"runtime-per-user": {}
"runtime-per-user": {
"ion-cannon-play-voices": {
"value": true
"ion-cannon-voice-style": {
"value": "CommandAndConquer"
"ion-cannon-play-klaxon": {
"value": true
"ion-cannon-ready-ticks": {
"value": 300
"ion-cannon-verbose-print": {
"value": false
Apache License
Version 2.0, January 2004
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
implied, including, without limitation, any warranties or conditions
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright {yyyy} {name of copyright owner}
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
See the License for the specific language governing permissions and
limitations under the License.
Copyright 2016 Veden
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
See the License for the specific language governing permissions and
limitations under the License.
\ No newline at end of file
# Rampant Tactics
Factorio Mod - Improves the enemies tactics by using potential fields/pheromones allowing probing of defenses, retreats, reinforcements, counterattacking, breaching, rallying death cry, and player hunting. Also removes homing biter projectiles.
# Forum Post
# Notes
0.14.14 factorio version fixed save corruption
0.14.10 factorio version fixed more pathing issues
0.14.4 factorio version fixed some issues with unit groups commands
There will be a slight pause the first time this is started up due to indexing all the chunks that have been generated.
MP should be working
Configure Options not in game menu:
- Ramp up to max biter wave size
# Features
- Recycling Biters - When large groups of biters form on the game map and aren't assigned to a unit group or near a base will be periodically removed and refunded to the ai causing attack waves proportional to the number of units removed.
- Breaching - When biters are destroying structures nearby unit groups will come to join them
- Frenzy squads - When a unit group gets close to a player or start combat they switch to attacking everything in there path for a set radius or until there is nothing left
- Rabid squads - Is in a permanent frenzied state as soon as the group is formed
- Tactical Retreats - these will take place when a unit group is in a chunk that has reached a death threshold
- Unit Group Merging - if multiple unit groups retreat at the same time there is a chance the groups will merge
- Unit Group Forming - any chunks with spawners in it that is covered by a pollution or player clouds will form groups based on the evolution factor
- Probing Behavior Against Defenses - unit groups will attempt to avoid chunks that are soaked in death
- Player Hunting - unit groups will track the player based on there emitted pheromone cloud
- Rallying Death Cry - when a unit is killed on a chunk that is past the retreat threshold, the unit will attempt to summon reinforcements to help them
- Counterattacks - when the player is in combat near nests they will send reinforcements to unit groups
- Reinforcements - nests will send assistance to nearby nests under attack by the player
- No Homing Projectiles - all projectiles are fired at locations and no longer track the player
- Pathfinding - unit groups will use potential fields to perform only single step pathfinding allowing for efficient and dynamic pathing
- Peace mode - if something sets peace mode, Rampant will respect it
# Planned Features
- Tunneling Biters
- Fire Biters
- Suicide Biters
- Infesting Biters
- Adaptive aliens
- Base Expansion
# Version History
0.15.5 -
- Tweak: Increased ai refund from 2 to 3
- Fix: Signals, Chain Signals, and Train stops now correctly rebuild when the corresponding make safe is toggled
- Feature: Remote interfaces for adjusting wave size, thresholds, ai build points, ai state, player thresholds, and attack triggers
- Improvement: Added reactor, programmable speaker, radars, lights, and rocket silo to biter targets
- Improvement: Switched all configs to global runtime except Dumb projectiles and NE Unit Launcher Options
0.15.4 -
- Fix: Changed setting name from "make buildings safe from biters" to "Enable building safety." This is to clarify what the setting does.
0.15.3 -
- Improvement: Added configuration for safe buildings. This will be improved after a bug fix in factorio
0.15.2 -
- Improvement: Created in game options for
- Max biter wave size
- Use dumb projectiles
- Use Natural Evolution unit launchers (Requires NE)
- Togglable attack wave triggers (pollution, player)
- Attack wave pollution trigger threshold
0.15.1 -
- Tweak: Increased small spitter damage from 7 to 15
- Tweak: Increased medium spitter damage from 15 to 22
- Improvement: Replaced game.evolution with game.forces.enemy.evolution
- Improvement: Fixed flame-thrower to flamethrower
- Improvement: Changed tunnel to have non-zero hp
0.14.13 -
- Reverted: Pheromone generation tweaks from 0.14.11
- Feature: Recycling large biter swarms that are stuck (causes a big attack wave, and pops up a message)
- Feature: Breaching, Biters destroying player buildings will attract other unit groups
- Tweak: Reduced unit group max size from 600 to 450
- Tweak: Reduced unit group radius from 30 to 20
- Fix: Unit groups merging during combat
- Optimization: Cleaned up regroup squad function to scale better
- Optimization: Retreats only fire once per chunk for every logic cycle
- Improvement: Cleaned up dispersion function for Pheromones
- Improvement: Increased attack wave frequency based on evolution factor (mainly for endgame)
0.14.12 -
- Tweak: Decreased slow map scan chunks scanned per logic cycle from 8 to 6
- Fix: Didn't set new version number forcing chunk recalculation every load
- Improvement: Added player buildings to slow map scan to catch buildings made outside factorio event system, (i.e. FARL)
- Improvement: Added console message when upgrading
0.14.11 -
- Tweak: Increased pheromone generation on (This only potential affects target selection and pathfinding, these do not trigger biter waves):
- Generators from 8 to 12
- Pumps from 2 to 5
- Offshore Pumps from 2 to 5
- Transport Belts from 1 to 2
- Accumulator from 10 to 14
- Solar Panel from 8 to 12
- Boiler from 12 to 16
- Assembling Machines from 10 to 16
- Roboport from 10 to 14
- Beacon from 10 to 14
- Furance from 12 to 16
- Mining Drills from 15 to 19
- Ammo Turret from 2.5 to 5
- Wall from 0.25 to 0.55
- Electric Turret from 4.25 to 7
- Fluid Turret from 5 to 9
- Turret from 3.5 to 5
- Tweak: Reduced map scan speed from 10 chunks to 8 chunks to account for worms in calculation
- Tweak: Increased pheromone dispersion from 0.05 to 0.1
- Tweak: Increased unit group move distance from 32 to 40
- Tweak: Reduced unit group member disown distance from 10 to 5
- Tweak: Increased unit group max slow down when ahead from 0.6 to 1
- Tweak: Reduced unit group max speedup when behind from 1.4 to 1.1
- Tweak: Increased unit group max slowdown from slow members from 0.3 to 0.9 (this is max speed multipler, so this is faster)
- Tweak: Increased unit attack radius from 20 to 28 tiles
- Improvement: Increased movement cycles for larger groups from 4 cycles to 6 cycles
- Improvement: Biter groups should attempt to avoid getting too close to water (screws up pathing)
- Improvement: Added worms to chunk calculation for determining better unit group formation and pathing
- Improvement: Removed nest negative contribution to base pheromone map for better pathing
- Improvement: Pheromones no longer travel over impassable terrain
- Fix: Prevent group spawning on chunks with enemy structures
- Fix: Capped the max group size that can be created by merging to 600 biters
- Fix: Dispand unit groups larger than 600 (, Thank you Nerchio for the save game)
0.14.10 -
- Feature: Replaces homing projectiles with non homing versions
- Improvement: Respect for peace mode. To be used with something like the True Peace Mod
- Fix: Enforce rate limit for retreats
0.14.9 -
- Fix: Added null check in rally cry for chunks that have yet to be generated by game engine (
0.14.8 -
- Feature: Rallying death cry, when a native dies on a chunk past the death threshold it will attempt to summon reinforcements from nearby nests
- Tweak: Increased unit group merge distance from 16 to 28 tiles
- Tweak: Increased retreat grab radius from 15 tiles to 24 tiles
- Tweak: Decreased vengeance squad cost from 50 to 45
- Improvement: On group merge recalculate the kamikaze threshold, so groups that become large have a chance to kamikaze before attacking
- Improvement: Disallow group merges when units are taking and receiving damage
- Fix: Corrected unit group frenzy trigger based on engaging a target
- Optimization: Switched to increment tick counter for processing and logic event
- Optimization: Rate limited rally cry to 3/0.75 sec
- Optimization: Rate limited retreat to 8/0.75 sec
0.14.7 -
- Feature: Counterattack waves trigger when the player is standing in a chunk with the death pheromone past the retreat threshold
- Feature: Reinforcement waves trigger when the player is standing in a chunk that contains a nest
- Tweak: Increased max number of unit groups that can be active concurrently from 30 to 40
- Improvement: Removed restriction on unit group formations around nests
0.14.6 -
- Major Fix: Corrected retreat logic having inverted comparison introduced in 14.4, so unit groups stopped retreating after lots of death happened in a chunk
- Major Fix: Corrected pheromone dispersal with negative numbers
- Fix: Adjusted scoring so unit groups try to avoid nest clusters when retreating (Messes up pathfinding)
- Fix: When placing a player building ai was given credit as if they destroyed it
- Tweak: Reduced retreat time length from 4.5 to 3 seconds
- Tweak: Reduced death pheromone produced on death from 100 to 75
- Tweak: Increased attack radius of unit groups from 16 to 20 tiles
- Tweak: Increased attack time length from 2.25 to 3 seconds
- Tweak: Increased nest pheromone production from 15 to 30
- Tweak: Increased unit group search radius during formations from 2 chunks to 3 chunks
- Framework: Decoupled squad status and kamikaze flag
- Improvement: Biters don't retreat when dying on a chunk with a nest
- Improvement: Chunks covered by nest pheromone remove death pheromone faster
- Improvement: Attack wave size varies based on normal distribution that is centered around a scaled evolution factor that is lower than vanilla
0.14.5 -
- Improvement: Enlarged player processing bubble from 3 to 4 chunks (pheromone radius is still 4 chunks)
- Fix: Increased player scoring weight, so biter groups correctly hunt once more (
- Improvement: Adjusted attack pathing, so groups can move diagonally
- Fix: Unit group retreating when player occupies same chunk
0.14.4 -
- Fixed a bug in the processing queue when upgrading mod
- Greatly decreased Player pheromone radius, now sits at roughly 4 chunks around the player
- Reworked pheromone pathfinding
- Removed base and defense attack wave trigger, in favor of using player pheromone and pollution
- Added periods of time where the enemy is not sending Rampant attack waves
- Adjusted retreat percentage to suit the reduced attack wave size
- Improved responsiveness on larger maps
- Reduced AI max build points
- Fixed player iteration bug
0.14.3 -
- Slightly lowered Rampant attack wave frequency
- Altered attack wave size to ramp up slower
- Added configuration options for:
- - Attack wave generation area
- - Attack wave threshold
- - Attack wave size
- - Turn off rampant attack waves
0.14.2 -
- Adjusted unit retreat group size threshold
- Adjusted squad attack pattern (
- Fixed migration issue
0.14.1 -
- Fixed ai created bases not being counted in logic
- Optimization to offset ai created bases scanning
0.13.5 = 0.14.5
0.13.4 = 0.14.4
0.13.3 = 0.14.3
0.13.2 = 0.14.2
0.13.1 - Back ported 0.14 factorio version to 0.13 factorio version
0.0.8 -
- Fixed retreat oscillations (
- Added scaling for kamikaze attack (
- Increased squad size max from 125 to 150, (larger waves)
0.0.6 -
- Some speed improvements
- MP is working (
0.0.5 -
- Fix for nil chunk in ai attack (
- Checks for main surface (
- Updated info with forum homepage
0.0.4 - initial release
local config = {}
local mathUtils = require("libs/MathUtils")
local gaussianRandomRange = mathUtils.gaussianRandomRange
attackWaveScaling is used to calculate the attack wave size from the evolutionFactor
default is natives.attackWaveMaxSize * (evolutionFactor ^ 1.666667)
DOES NOT affect vanilla biters waves
config.attackWaveScaling = function (evolutionFactor, natives)
local attackWaveMaxSize = natives.attackWaveMaxSize
return math.ceil(gaussianRandomRange(attackWaveMaxSize * (evolutionFactor ^ 1.66667),
(attackWaveMaxSize * 0.5) * 0.333,
attackWaveMaxSize + (attackWaveMaxSize * 0.25)))
return config
-- imports
local entityUtils = require("libs/En