Automatic base building
Automatic base building is the process of finding, claiming and, building up a claimed room without using the UI and direct user input. For many fully a fully automatic bot is the end-goal and automatic base building is a large step.
Types[edit | edit source]
There's a few types of automatic bases, depending on method used.
Bunker[edit | edit source]
The easiest by far is to have a pre-defined 'bunker' containing all structures you are intent on using and simply finding an open area to place it. The 'center' of the bunker acts as an anchor and from there you can generate the structures of your pre-determined bunker based on their relative position to the anchor. As long as the space is there, there should be no conflicts in the generation.
Stamp/Tile-sets[edit | edit source]
Normally using a core tile/stamp, you can then determine locations for other pre-defined tile-sets/stamps to be placed around your anchor dependent on the terrain in the room. This allows for a bit more flexibility in rooms that do not have large-open spaces that bunkers can not fit in, while still allowing for already designed and known-to-work types of tiles insuring for example, that labs are in-range of other labs for reactions, extensions are in reachable and manageable locations, spawns have open area for creeps to exit, and so on.
Dynamic/Pattern Generation[edit | edit source]
Using a given open area, you can generate a structure or set of structures grouped together based on some basic rules. Some examples would include generating extension fields for one or more fillers to fill, calculating the best position for towers to sit for maximum damage on walls (instead of in a tight fill-group pattern), and so on.
Useful Algorithms[edit | edit source]
There are several useful algorithms to take into consideration when automatically building your base.
Distance-Transform[edit | edit source]
Using the Screep's terrain, you can use Distance Transformation to have natural walls be barrier pixels and swamps/plains to be allowed. Using this, you can then create a matrix/object/array of all positions with a score of how much open space is available around a given roomPosition. This is direly useful to know how much you can fit in an area, without having user input.
Flood Fill[edit | edit source]
Flood Fill is useful for defining or testing areas to make sure they are secure (like walls around a base) or defining areas into groups. Filling an area and gathering room positions allows you to use these positions later, for whatever purpose you see fit.
Minimum Cut[edit | edit source]
Minimum Cut is useful for well sized rampart & wall placment.