diff --git a/core/assets/baseparts/1591380533871.msch b/core/assets/baseparts/1591380533871.msch
new file mode 100644
index 0000000000..aa42280794
--- /dev/null
+++ b/core/assets/baseparts/1591380533871.msch
@@ -0,0 +1,2 @@
+mschxœ%Œ]ƒ „GD4ñ¡>ôjÅ�5A0@Ûxù¶KÍþfgöƒ�i íŒ~ÉTs@KÉaÚÙ=(lŽ¼]Òæ=ú™JátbÌÑS²ö\/>cÂtÄ7'âÂVô•qwqŸŸ¹l1Ø•'*â·Â»Íñ™¸IAA52Z4
+uQ²I´ZšºÚ%ºú~ÄjêþZ˜zz]'faè‹¡/†¾øúòU˜ú\¹,Ä
\ No newline at end of file
diff --git a/core/assets/baseparts/1591380739339.msch b/core/assets/baseparts/1591380739339.msch
new file mode 100644
index 0000000000..e7a245e2d7
--- /dev/null
+++ b/core/assets/baseparts/1591380739339.msch
@@ -0,0 +1,2 @@
+mschxœŠA
+!Û…À^rÈ7|”q‡]A•|?cº(h‚ƒï©1üexœcéÍqÊ�Ÿ,í»Æ,ÒãÍ�5MQ¼ç'õ’S�—–Zq–É-Yš@Àæ8Ó:L´Ëí"o—@ƒ4'
\ No newline at end of file
diff --git a/core/assets/baseparts/1591381320600.msch b/core/assets/baseparts/1591381320600.msch
new file mode 100644
index 0000000000..9ec53eaf98
--- /dev/null
+++ b/core/assets/baseparts/1591381320600.msch
@@ -0,0 +1,2 @@
+mschxœE��
+ƒ0„¯¦þÀ`{Ž>T¦Aµ–*Œ½ûÀõg°@øÂå.�Æ  =o‚n)ÕãvìŽ£	ìÅA¯lºMü,ý“ÏSâã&ÓÊÞNìÌ­s¸/‘ÃjO1!Êq`ûK¢ñû,&�[ÀÿR Œ¤(O€®»6EÖ	*?»Ê».¡šëº>hRSÉ–-êTQBTP5PýAÙù–Ø(¢
\ No newline at end of file
diff --git a/core/src/mindustry/core/World.java b/core/src/mindustry/core/World.java
index e783073619..00dc23c333 100644
--- a/core/src/mindustry/core/World.java
+++ b/core/src/mindustry/core/World.java
@@ -235,6 +235,11 @@ public class World{
             }
         });
 
+        //postgenerate for bases
+        if(sector.preset == null){
+            sector.planet.generator.postGenerate(tiles);
+        }
+
         //reset rules
         setSectorRules(sector);
 
diff --git a/core/src/mindustry/maps/generators/BaseGenerator.java b/core/src/mindustry/maps/generators/BaseGenerator.java
index e508f8f493..1fd5754aa7 100644
--- a/core/src/mindustry/maps/generators/BaseGenerator.java
+++ b/core/src/mindustry/maps/generators/BaseGenerator.java
@@ -15,6 +15,7 @@ import mindustry.type.*;
 import mindustry.world.*;
 import mindustry.world.blocks.defense.*;
 import mindustry.world.blocks.environment.*;
+import mindustry.world.blocks.power.*;
 import mindustry.world.blocks.production.*;
 
 import static mindustry.Vars.*;
@@ -24,7 +25,7 @@ public class BaseGenerator{
     private static final Schematic tmpSchem2 = new Schematic(new Array<>(), new StringMap(), 0, 0);
     private static final Vec2 axis = new Vec2(), rotator = new Vec2();
 
-    private final static int range = 200;
+    private final static int range = 180;
 
     private Tiles tiles;
     private Team team;
@@ -53,8 +54,6 @@ public class BaseGenerator{
 
         Block wall = wallsSmall.getFrac(bracket), wallLarge = wallsLarge.getFrac(bracket);
 
-        //TODO random rotation
-
         for(Tile tile : cores){
             tile.clearOverlay();
             Schematics.placeLoadout(coreschem.schematic, tile.x, tile.y, team, coreschem.requiredItem == null ? Blocks.oreCopper : ores.get(coreschem.requiredItem));
@@ -86,7 +85,7 @@ public class BaseGenerator{
                     boolean any = false;
 
                     for(Point2 p : Geometry.d8){
-                        if(Angles.angleDist(Angles.angle(p.x, p.y), spawn.angleTo(tile.x, tile.y)) > wallAngle){
+                        if(Angles.angleDist(Angles.angle(p.x, p.y), spawn.angleTo(tile)) > wallAngle){
                             continue;
                         }
 
@@ -124,6 +123,14 @@ public class BaseGenerator{
         }
     }
 
+    public void postGenerate(){
+        for(Tile tile : tiles){
+            if(tile.isCenter() && tile.block() instanceof PowerNode){
+                tile.entity.placed();
+            }
+        }
+    }
+
     void pass(Cons<Tile> cons){
         Tile core = cores.first();
         //for(Tile core : cores){
diff --git a/core/src/mindustry/maps/generators/WorldGenerator.java b/core/src/mindustry/maps/generators/WorldGenerator.java
index c66138096e..71f5c23d34 100644
--- a/core/src/mindustry/maps/generators/WorldGenerator.java
+++ b/core/src/mindustry/maps/generators/WorldGenerator.java
@@ -4,4 +4,7 @@ import mindustry.world.*;
 
 public interface WorldGenerator{
     void generate(Tiles tiles);
+
+    /** Do not modify tiles here. This is only for specialized configuration. */
+    default void postGenerate(Tiles tiles){}
 }
diff --git a/core/src/mindustry/maps/planet/TODOPlanetGenerator.java b/core/src/mindustry/maps/planet/TODOPlanetGenerator.java
index 41ca7cde2c..dc838ea5a4 100644
--- a/core/src/mindustry/maps/planet/TODOPlanetGenerator.java
+++ b/core/src/mindustry/maps/planet/TODOPlanetGenerator.java
@@ -17,6 +17,7 @@ import static mindustry.Vars.*;
 public class TODOPlanetGenerator extends PlanetGenerator{
     Simplex noise = new Simplex();
     RidgedPerlin rid = new RidgedPerlin(1, 2);
+    BaseGenerator basegen = new BaseGenerator();
     float scl = 5f;
     float waterOffset = 0.07f;
 
@@ -282,7 +283,7 @@ public class TODOPlanetGenerator extends PlanetGenerator{
         Schematics.placeLoadout(Loadouts.advancedShard, spawn.x, spawn.y);
 
         if(sector.hasEnemyBase()){
-            new BaseGenerator().generate(tiles, enemies.map(r -> tiles.getn(r.x, r.y)), tiles.get(spawn.x, spawn.y), state.rules.waveTeam, sector);
+            basegen.generate(tiles, enemies.map(r -> tiles.getn(r.x, r.y)), tiles.get(spawn.x, spawn.y), state.rules.waveTeam, sector);
 
             state.rules.attackMode = true;
         }
@@ -290,4 +291,8 @@ public class TODOPlanetGenerator extends PlanetGenerator{
         state.rules.waves = true;
     }
 
+    @Override
+    public void postGenerate(Tiles tiles){
+        basegen.postGenerate();
+    }
 }
