Skip to content

Overmind 0.5.0: "Evolution"

Pre-release
Pre-release
Compare
Choose a tag to compare
@bencbartlett bencbartlett released this 11 Aug 02:11
· 207 commits to master since this release

This 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 or rollup -c --dest pserver. Use npm run push-main or npm 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 as Overmind.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 (formerly WorldMap)
  • 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 with Assimilator.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
  • Lots of additions to CombatIntel and CombatTargeting modules, including predictive damage calculations and automatic siege target calculations. These will be used in the upcoming combat update.
  • New CombatZerg methods autoMelee, autoHeal, autoRanged, and autoCombat which provide general-purpose combat routines for small skirmishes
    • Added a GoalFinder module to generate lists of PathFinderGoals representing positions and ranges that creeps should approach and avoid
  • Added a SourceKeeperReaper overlord to facilitate source keeper mining (finally!)
  • Added SpawnGroups, 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

Changed

  • The Overmind object now try...catch evaluates init and run 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 all Colonies, HiveClusters, and Directives 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 have incubator or incubatingColonies properties.
  • Logistics network improvements:
    • LogisticsNetwork.requestOutputAll() has been replaced by requestOutput({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-house Movement and Pathing libraries
  • Deprecated DirectiveLogisticsRequest
  • Removed lodash.minBy dependencies to reduce compiled codebase size