Skip to content

Overmind 0.5.1

Pre-release
Pre-release
Compare
Choose a tag to compare
@bencbartlett bencbartlett released this 02 Jan 21:32
· 168 commits to master since this release

This patch changes the architecture of Overmind to be much more CPU efficient by introducing a cache-friendly refresh() phase to the main loop. See this blog post for more details. Additionally, the Visualizer system has been rewritten, and prelimiary support for assimilation and swarms has been added.

Added

  • Huge persistence update: much of the Overmind architecture now persists on global between ticks! This saves a ton of CPU that was previously used toward garbage collection.
    • The global Overmind object is now rebuilt every 20 ticks; in the meantime, refresh() is called
    • Colonies, HiveClusters, Directives, Overlords, and Zerg are also persistent
    • Parsed memory is saved each tick and restored the following tick to avoid JSON.parse() costs
    • You can expect massive CPU savings, along with decreased CPU variabiity from this update
  • Added caching methods $.set() and $.refresh()
  • Lots of new content added to the Visualizer!
    • Overmind logo now gets drawn in upper left corner
      • This was a fun little project to do in Mathematica; I made a curve simplification algorithm to look at an image and give the minimum number of points to describe its perimeter within a given tolerance (those are all the hard-coded arrays in logos.ts)
    • CPU, bucket, and GCL meters drawn
    • Updates to colony creep count visuals
    • Displays bar graphs for command center and hatchery statistics
  • New Segmenter module manages asynchronous memory segments
  • Added some under-the-hood content for assimilation
    • Completed the "key exchange protocol" that the assimilator uses to periodically validate codebases
  • Preliminary support for formation-based movement and pathfinding using Swarms
    • Added behavioral locks to prevent usage of this feature for non-assimilated codebases

Changed

  • Improvements to RangedDefenseOverlord which utilize some of the new combat logic developed for SK mining
  • Queens now are prespawned 100 ticks in advance of when they are needed (up from 50) until there are multiple spawns in the room
  • Tweaks to bootstrapping
    • Triggers if there is no queen and not enough energy to spawn a new one, regardless of presence of miners
    • Will now reassign a transporter to become a queen if one is available
  • CPU improvements
    • Colony.registerRoomObjects now uses more caching and is less expensive
    • Improvements to MiningSite, ExtractionSite, and UpgradeSite to make them more CPU friendly
  • Separated Overlord abstract class into Overlord and CombatOverlord classes
  • Standardized creep setups and role names into a single library for greater consistency and exchangeability
  • Boosts are now assigned by overlords in the constructor phase by passing a boostWishlist option in the zerg() and combatZerg() methods
  • Improvements to destroyer pairs
  • Better timeout functions for terminal state directives
  • Changes to flag color codes and directory structure to make directive types more consistent:
    • Changed primary color classifications:
      • Red: offsensive combat (previously all combat)
      • Blue: defensive combat (new)
      • Yellow: resource collection and transport (previously logistics)
      • Brown: terminal state directives (new)
    • Specific color code changes:
      • Guard: red/blue -> blue/blue
      • Invasion defense: orange/red -> blue/purple
      • Evacuate terminal state: yellow/red -> brown/red
      • Emergency terminal state: yellow/orange -> brown/orange
      • Rebuild terminal state: yellow/brown -> brown/yellow
    • New console method will assist in this migration: removeErrantFlags() removes all flags which do not match a directive color code
  • Colonies now no longer have an Overseer property. The Overseer has been moved to the Overmind and now handles all directives and overlords for all colonies
    • Overlords are now initialized and run in order of their priority
  • Changed routine to deal with critically low CPU bucket. Reaching the critical bucket threshold suspends operation until the entire bucket has replenished. This avoids entering a bucket "limbo state" where extra memory parsing costs are ever-present, increasing the total cost of operations.
  • Quick garbage collection is now explicitly called when the Overmind is re-instantiated
  • Limits the number of owned rooms you can own on CPU-limited shard3 to three
    • Adjustable value in ~settings.ts; will implement a more sophisticated CPU-based limiter in future

Fixed

  • Bugfix with pioneer recharging behavior to include dropped resources in recharging options
  • Bugfix for incorrectly initialized terminalNetwork memory not logging transfer costs correctly (#38, thanks @MaggNorway!)
  • Various SpawnGroup bugfixes
  • Fixed a bug which caused RoomPlanner to still demolish baby ramparts prematurely
  • Fixed a bug where I forgot to add container-building capabilities to the new extraction overlords (derp)
  • Fixed a bug which broke notification disabling for scouts (#48)
  • Fixed a bug where 0.4.x -> 0.5.x version migration could overwrite the default signature on a fresh installation of Overmind, breaking worker behavior
  • Replaced all uses of deprecated Game.map.getTerrainAt to use new Game.map.getRoomTerrain method
  • Barriers now placed on center tile in bunkers (#59)
  • Fixed an issue in testing assimilation status outside shard2 (#57)
  • Fixed a bug where queens could get idle indefinitely at early RCL if minerals ended up in Hatchery battery

Removed

  • MiningSites and ExtractionSites have been removed; their functionalities have been split among the mining/extraction directives and overlords