Overmind 0.5.0: "Evolution"
Pre-releaseThis release adds a huge set of new features to Overmind, described in more detail in this blog post. The most notable change is the shift in base layout from the classic "box and flower" design to a much more compact circular bunker. Although this layout is more expensive to maintain, it is much more defensible and features a number of hard-coded optimizations.
This is also the first release capable of fully automatic operation! By default, the operational mode is set to fully automatic; you can change the level of autonomy with the setMode()
console command. Other added features include a new Movement
library which allows creeps to fluidly glide past each other even in confined bunker alleys, support for Source Keeper mining, more advanced terminal logic, distributed spawning structures, and a lot of improvements to caching methods.
Important notes as of this release:
- Overmind no longer supports shared-vm. Isolated-vm is now required; you can set this in your account runtime settings.
- The codebase can no longer be deployed using
rollup -c --dest main
orrollup -c --dest pserver
. Usenpm run push-main
ornpm run push-pserver
instead.
Added
- Overmind is now capable of fully automatic operation! This patch added functionality to automatically reserve and claim rooms without any user input required. These are turned on by default; you can use the
setMode()
console commands to change the degree of autonomy.- Added the
Strategist
module, instantiated asOvermind.strategist
is bot mode is enabled. Strategist is currently responsible for choosing the next room to colonize, but will contain more high-level decision making functionality in the future. - Added the
ExpansionPlanner
module to generate numerical scores for rooms to determine outpost/expansion preferences - Added several methods to the
Cartographer
module (formerlyWorldMap
)
- Added the
- Added the
Assimilator
module, which verifies the integrity of an Overmind codebase. This will be used for the upcoming assimilation patch. The source code for this module is obfuscated; see the obfuscated file comments in/src/assimilation/Assimilator_obfuscated.js
for details.- Added an implementation of sha256 hashing for use by this module
- Anything marked with
@assimilationLocked
or registered withAssimilator.validate()
cannot be modified without invalidating assimilated status
- Added the
Movement
library, which replaces Traveler as the default method of moving creeps around in Overmind- Added (and improved multiple times) creep pushing behavior that moves idling creeps out of the way
- Creeps have move priorities, which characterize how important their assignment is. Creeps will yield to other creeps with more important priorities.
- Added recursive pushing to allow spawns to shove blocking creeps out of the way to make room for a spawning creep.
- Added methods for pathing around a room while kiting enemies and a
Movement.combatMove()
method which will be used more in the upcoming combat update
- Added (and improved multiple times) creep pushing behavior that moves idling creeps out of the way
- Lots of additions to
CombatIntel
andCombatTargeting
modules, including predictive damage calculations and automatic siege target calculations. These will be used in the upcoming combat update. - New
CombatZerg
methodsautoMelee
,autoHeal
,autoRanged
, andautoCombat
which provide general-purpose combat routines for small skirmishes- Added a
GoalFinder
module to generate lists ofPathFinderGoal
s representing positions and ranges that creeps should approach and avoid
- Added a
- Added a
SourceKeeperReaper
overlord to facilitate source keeper mining (finally!) - Added
SpawnGroup
s, which allow for decentralized creep spawning distributed among nearby colonies (work in progress) - Room planner updates:
- Room planner will now destroy or dismantle incorrectly-placed structures allowing you to change your room plan after it is built
- Finished support for bunkers
- New
BunkerQueen
overlord which has a lot of hard-coded optimizations built specifically for the bunker layout - New
ControllerAttacker
overlord which spawns groups of controller attackers ("infestors") distributed across nearby colonies to attack a room controller. (Thanks @rooklion/@Sarrick for this contribution!) - Added terminal exception states to account for various abnormal conditions, such as rebuilding a room or evacuating a room which is about to be breached. Terminals that are in an exception state will maintain a small, tightly controlled set of resources in their store and will not engage in normal terminal activity.
- Added a
GlobalCache
module to store expensive calculations yielding RoomObjects on global; this has been integrated in various points in the codebase to improve CPU usage.- Renamed
GlobalCache
to$
($ -> cash -> cache) for maximum brevity and punnyness
- Renamed
Changed
- The Overmind object now
try...catch
evaluatesinit
andrun
methods for each colony / network. If an exceptions are caught, they are added to a queue and thrown at the end of the tick, preventing a global deadlock from occurring due to a problem in a single colony. - Zerg are now instantiated in constructor phase by their overlords rather than by the Overmind object.
- All Overlords are now instantiated in a
spawnMoarOverlords()
method, which allColonies
,HiveClusters
, andDirectives
now have. This is primarily in preparation for future restructuring to improve CPU usage. - Managers are now stationary (CARRY only) at RCL8 in the bunker layout
- Refactored Hatchery spawning code to allow for greater flexibility in spawning creeps, such as requesting a specific spawn (useful for spawning the now-stationary manager)
- Refactored incubation logic to use the new
SpawnGroup
objects. Colonies no longer haveincubator
orincubatingColonies
properties. - Logistics network improvements:
LogisticsNetwork.requestOutputAll()
has been replaced byrequestOutput({resourceType: 'all'})
and now generates a single request for the sum amount of all resourceTypes in the target. This improves performance and CPU cost.- Added cache invalidation methods to fix an issue where too many transporters could be assigned to the same logistics target during a single tick
- Dropped resources and tombstones now directly request collection from the logistics network rather than using a logistics directive
- Changed order of operations in
predictedRequestAmount
to yield more accurate results when near target store/energy capacity
- RoadLogistics now uses about 80% less CPU. Workers now get a chained task object to work more efficiently when repairing remote roads.
- TerminalNetwork now equalizes all base resources (energy, power, all base minerals)
- Workers now include dropped energy in list of objects they can recharge from and pick their recharge target more intelligently, accounting for other targeting workers
- Workers and pioneers now will use energy from available unowned storage structures if available
- Improvements to room planner demolishing behavior:
- Added some safeguards on destroying misplaced spawns to ensure that there are enough workers to rebuild the spawns
- Room planner is now better at detecting gridlocked situations and will destroy structures as needed to make room for construction sites
- Reorganized some memory structures, consolidating things into
Memory.settings
- Various CPU improvements
Fixed
- Fixed a bug where mining sites could get clogged if invaders died on the container outputs and dropped minerals which would not get withdrawn
- Fixed a bug in approximate path length caculations in
LogisticsNetwork.bufferChoices
- Room planner now correctly restores flag memories when reopening a session
- Fixed a bug introduced in the last patch that caused workers to ignore the withdraw limit
- Fixed a rare bug in bootstrapping that could prevent a colony from correctly recovering from a crash
- Fixed (?) a really weird bug where Colonies would sometimes incorrectly compute assets. The bug was fixed by adding print statements and I have no idea why.
Removed
- Removed dependencies for
Traveler
, replacing with in-houseMovement
andPathing
libraries - Deprecated
DirectiveLogisticsRequest
- Removed
lodash.minBy
dependencies to reduce compiled codebase size