diff --git a/core/assets/baseparts/1599594352859.msch b/core/assets/baseparts/1599594352859.msch
new file mode 100644
index 0000000000..3b73103fa9
Binary files /dev/null and b/core/assets/baseparts/1599594352859.msch differ
diff --git a/core/assets/baseparts/752911659508695080.msch b/core/assets/baseparts/752911659508695080.msch
new file mode 100644
index 0000000000..9f1e10578e
--- /dev/null
+++ b/core/assets/baseparts/752911659508695080.msch
@@ -0,0 +1,2 @@
+mschxœE’}r›@Åµ|Ã.0ÉôÜ%ôÄÞºLlp×�4éiz47Cß[eÚa˜Z==ieËé�dóxñò°N>|ý¼ZÞð5†NúÃ2ž‡ƒŸ×0}ÛN^Úóôc›ŽÃmÙÂ!Ö¬ã<m—á°Ì¯þ}	bÃ²Žá}¸n—ë?yX¶Õi¯Ûùæ©=nÓ*ö3‹i®ì:ÌËÑKÿ¦ãÉÿ7íßFÔþçÆÃÊ.·å<†á:ÎþŒ`P¯4ÀH[xžf?œüìÃHqñÙ^dÄ+•ty&‰IÄH#VáDRIðò'9P#DeBIr	àhšJ+&E‰0—!–¥˜‘­Ò}�¦Éþgÿ@e&®Zj{˜<ºFdŠ\Q+…U81Ð2*tÀ‚’
+på¾ï¿ðþž¶L–ô.�¼ªb_#é~ß?ðÜ1ZiÃýY¢²’×Ë00FË…Þi
`‡D#)WIƒ	R‰›Š;¨iÅÈ)ZEGe£Ê†JÞªÜ	•†V“QjUj¹"ç=¬•‰m¸Œ’óYšV�VEG"“øÛÁÃá)Ä•3¹xœRëZ­kµ®es�æ:ÍuzÙŽž”üct´fTKB4*Á�9•´ì×ÑÎI¯#õ:R¯#õ)—ä¢RXE+I-�ü¥r æ™ã!VðG§u
\ No newline at end of file
diff --git a/core/assets/baseparts/752912199781056583.msch b/core/assets/baseparts/752912199781056583.msch
new file mode 100644
index 0000000000..be0fe8f10e
Binary files /dev/null and b/core/assets/baseparts/752912199781056583.msch differ
diff --git a/core/assets/baseparts/752912460620496957.msch b/core/assets/baseparts/752912460620496957.msch
new file mode 100644
index 0000000000..7557179096
Binary files /dev/null and b/core/assets/baseparts/752912460620496957.msch differ
diff --git a/core/assets/baseparts/752915237476368385.msch b/core/assets/baseparts/752915237476368385.msch
new file mode 100644
index 0000000000..cfff6b7269
Binary files /dev/null and b/core/assets/baseparts/752915237476368385.msch differ
diff --git a/core/assets/baseparts/752915746673131550.msch b/core/assets/baseparts/752915746673131550.msch
new file mode 100644
index 0000000000..db0125a825
Binary files /dev/null and b/core/assets/baseparts/752915746673131550.msch differ
diff --git a/core/assets/baseparts/752918895291007041.msch b/core/assets/baseparts/752918895291007041.msch
new file mode 100644
index 0000000000..54f4b360c8
Binary files /dev/null and b/core/assets/baseparts/752918895291007041.msch differ
diff --git a/core/assets/baseparts/752918896331456582.msch b/core/assets/baseparts/752918896331456582.msch
new file mode 100644
index 0000000000..755ff98c0b
Binary files /dev/null and b/core/assets/baseparts/752918896331456582.msch differ
diff --git a/core/assets/baseparts/752919619894902997.msch b/core/assets/baseparts/752919619894902997.msch
new file mode 100644
index 0000000000..c8c143ca23
Binary files /dev/null and b/core/assets/baseparts/752919619894902997.msch differ
diff --git a/core/assets/baseparts/752921320802746461.msch b/core/assets/baseparts/752921320802746461.msch
new file mode 100644
index 0000000000..e0333bb511
Binary files /dev/null and b/core/assets/baseparts/752921320802746461.msch differ
diff --git a/core/assets/baseparts/752923816967012442.msch b/core/assets/baseparts/752923816967012442.msch
new file mode 100644
index 0000000000..44c566dfcf
--- /dev/null
+++ b/core/assets/baseparts/752923816967012442.msch
@@ -0,0 +1 @@
+mschxœ5Í[ŽÃ Ðkô¥iÕ5ô;‹B4EÊK„Têî{]k>ÐÁæÚàG�ŸÓ”qJµ•qÌõáŸ©Œ¸·ÒÒ\ö©–ù•ßKÅõ¯¦õYZî×š·
±.{Ë¶¦~[ö:dÜÖ9ïSjeè+WxðÀÁ	DÑ»h¥wçÐñU„°êà-éY‹â�Àõ-è:Gtñ:µ)„¿h.2Ø8Xÿ¨ÂÿoDt‚“EÎÿˆ6ÏšT:ÃÁˆÆA·\8÷ÅÞ`äÒ#`
\ No newline at end of file
diff --git a/core/assets/baseparts/752926963076694047.msch b/core/assets/baseparts/752926963076694047.msch
new file mode 100644
index 0000000000..6e26296729
Binary files /dev/null and b/core/assets/baseparts/752926963076694047.msch differ
diff --git a/core/assets/baseparts/752927009641857205.msch b/core/assets/baseparts/752927009641857205.msch
new file mode 100644
index 0000000000..7943fb1481
Binary files /dev/null and b/core/assets/baseparts/752927009641857205.msch differ
diff --git a/core/assets/baseparts/752930133874049034.msch b/core/assets/baseparts/752930133874049034.msch
new file mode 100644
index 0000000000..93941bdff3
Binary files /dev/null and b/core/assets/baseparts/752930133874049034.msch differ
diff --git a/core/assets/baseparts/752930845685448825.msch b/core/assets/baseparts/752930845685448825.msch
new file mode 100644
index 0000000000..594f46b9ee
--- /dev/null
+++ b/core/assets/baseparts/752930845685448825.msch
@@ -0,0 +1,4 @@
+mschxœ-ÎMnÄ `þÒÉbÔt5»ŠI\‰$# j�?~qƒ¢ð32Mt3äö´1}þpåž—T¾Vþæ½q¤Ø–Ô;W
+õ8á´æÖk~žý¨tí|nIzæµæRèþ›$4ó_¯iAbjGIu~¥�M¹ó6·ã¬ÑC~dÉ€¹Î‚SFÌ0À’A‰ˆX4 2�“2úp
+²FD<"FÐçåÚ8ÁéeÀÓ^³H^
AG
+Ø âÈ¸°ŠSþkA‰àS«8Å+A‰dÝÈËŒ£}Â)*o
\ No newline at end of file
diff --git a/core/assets/baseparts/752932257538506823.msch b/core/assets/baseparts/752932257538506823.msch
new file mode 100644
index 0000000000..097246d11c
Binary files /dev/null and b/core/assets/baseparts/752932257538506823.msch differ
diff --git a/core/assets/baseparts/752937073991745554.msch b/core/assets/baseparts/752937073991745554.msch
new file mode 100644
index 0000000000..fe8d7ccc9c
--- /dev/null
+++ b/core/assets/baseparts/752937073991745554.msch
@@ -0,0 +1 @@
+mschxœ-ÍkÂ à)[‹¶úËSôPHI$¡mB©‰·w×5°ùL´¸70«_"ú=øZc™¼·èÂ¶¾ãg+¸-1¼üš‚ÏÓ\RÎhÿA¸9íµ¤çQ)çR�Ë´oG	ÀƒÐ#´¢ƒ¢EÐåïÄ£$¢8¢¡åAÃÐÐ¶ÂIh…N8½à„‹p®5\ÄÆrƒ¡;K½êø¥%
\ No newline at end of file
diff --git a/core/assets/baseparts/752937145978716332.msch b/core/assets/baseparts/752937145978716332.msch
new file mode 100644
index 0000000000..c3b5dbb923
Binary files /dev/null and b/core/assets/baseparts/752937145978716332.msch differ
diff --git a/core/assets/baseparts/752937230456193185.msch b/core/assets/baseparts/752937230456193185.msch
new file mode 100644
index 0000000000..558a0a3c63
--- /dev/null
+++ b/core/assets/baseparts/752937230456193185.msch
@@ -0,0 +1 @@
+mschxœMIƒ0—„"qhû�Üú¡,‰É8¢Ï¯ÓƒÇ£YlL˜®ÆÂ˜OåXÂÆ5¼G<®¨,�¿*1é!xi“%Wî–Ø¥9+—pMãY8}bÍ)îa•¼ïv°ÉÆA�‹-»æS%/­�Ù7ÁÞƒŒáîoÂ­ëƒÁr€	äm;s
þ¦ë&Á÷.Œ›ø^±'�
\ No newline at end of file
diff --git a/core/assets/baseparts/752939992300388483.msch b/core/assets/baseparts/752939992300388483.msch
new file mode 100644
index 0000000000..6d4d56c904
--- /dev/null
+++ b/core/assets/baseparts/752939992300388483.msch
@@ -0,0 +1 @@
+mschxœ=‘	nƒ0E›}	!]U½—èMœÄJ‘À¦ÆnÕÛ×Ã—Š@_~üç‘�Þ)K(5jÑÔo«uzµ?Ú­³2¾¦úf?}+ouóô¦ûèlðÚQq³æ&Oƒî:=>´Ñn¯6›�•WeôLù¢Í]3î¡GÏÛÿo¶ÙànšŠ«òqÓ_jý§v‹šÇ5,+}®$>‚„ˆ!Iò*%!#ÞaÂ«xóÛŒxÍœv"¡K4%t	=L¡g\äH(1v=‡ž£™CÏ¡€ôÓKL/¡WÐ+4+èô°†Þ`zƒé
ôz‹f½…ÞvÐ\ÌbìÓÐ{è=š=ôúð}ÀôÓ†9�H”|XF'F‚žÏˆÄ+GAçxüt/Ÿ”t‰#â¹ð?1"¬è�ÅÜV9�
\ No newline at end of file
diff --git a/core/assets/baseparts/752941306489077823.msch b/core/assets/baseparts/752941306489077823.msch
new file mode 100644
index 0000000000..d98f3b2a11
--- /dev/null
+++ b/core/assets/baseparts/752941306489077823.msch
@@ -0,0 +1 @@
+mschxœ-‹Kƒ0D'Ÿ†Ð®Ú]Á™�E¬lB@D�_!ËcûÍÁÀWšŸ|�$Nãºœ,c]wè6Î3×Ï‹�Â‘L…êÄ‚×vHæao6âJB¥ÐA¿’ ×†…5ÐŠN‡[­Uæaœúšñ-
¾xÛ‡î—˜o‚]þ¡&þ
\ No newline at end of file
diff --git a/core/assets/baseparts/752942460573057196.msch b/core/assets/baseparts/752942460573057196.msch
new file mode 100644
index 0000000000..57b5e83b0a
Binary files /dev/null and b/core/assets/baseparts/752942460573057196.msch differ
diff --git a/core/assets/baseparts/752944648628076745.msch b/core/assets/baseparts/752944648628076745.msch
new file mode 100644
index 0000000000..090ffe0155
--- /dev/null
+++ b/core/assets/baseparts/752944648628076745.msch
@@ -0,0 +1,2 @@
+mschxœMŽan„ …Š®ºmMÿöŠètC‚`ºí‰{Š]:àŸ&ïñ˜=Þ¤Óázh·ª`öÝÒWiS‡Oa!Ìw)(úŽA/Ñ¼zcÿÉyw”6Í¢Ö`¬å^)ÜHE'¾]¼¶j!ƒùL7Â{4Q;“6µx÷E?Ü¡>ñL{y¢œ_‰½úÌ‡±†“êØÈ–ðÁ…¶$ÊŽ†ˆ¶êj7CÃn‹6ÿŠŽõÑ³!Ot-G+Ä‰æëoíÀè†.?ó£dò
—Ì�œkr/‰Ô8N4@Ï¨ƒd41úSqÃ‚± c%
+ÆÄÉ�M
\ No newline at end of file
diff --git a/core/assets/baseparts/752955880965799966.msch b/core/assets/baseparts/752955880965799966.msch
new file mode 100644
index 0000000000..4cda9322ea
Binary files /dev/null and b/core/assets/baseparts/752955880965799966.msch differ
diff --git a/core/assets/baseparts/752961534690328648.msch b/core/assets/baseparts/752961534690328648.msch
new file mode 100644
index 0000000000..15dbc9618c
Binary files /dev/null and b/core/assets/baseparts/752961534690328648.msch differ
diff --git a/core/assets/baseparts/752961607314702336.msch b/core/assets/baseparts/752961607314702336.msch
new file mode 100644
index 0000000000..f7ea7664db
Binary files /dev/null and b/core/assets/baseparts/752961607314702336.msch differ
diff --git a/core/assets/baseparts/752965444419453010.msch b/core/assets/baseparts/752965444419453010.msch
new file mode 100644
index 0000000000..008b1f015b
Binary files /dev/null and b/core/assets/baseparts/752965444419453010.msch differ
diff --git a/core/assets/baseparts/752967201597947924.msch b/core/assets/baseparts/752967201597947924.msch
new file mode 100644
index 0000000000..76607f758f
Binary files /dev/null and b/core/assets/baseparts/752967201597947924.msch differ
diff --git a/core/src/mindustry/maps/generators/BaseGenerator.java b/core/src/mindustry/maps/generators/BaseGenerator.java
index a671ac4d72..f1a508d4c2 100644
--- a/core/src/mindustry/maps/generators/BaseGenerator.java
+++ b/core/src/mindustry/maps/generators/BaseGenerator.java
@@ -26,6 +26,7 @@ public class BaseGenerator{
     private Tiles tiles;
     private Team team;
     private ObjectMap<Item, OreBlock> ores = new ObjectMap<>();
+    private ObjectMap<Item, Floor> oreFloors = new ObjectMap<>();
     private Seq<Tile> cores;
 
     public void generate(Tiles tiles, Seq<Tile> cores, Tile spawn, Team team, Sector sector){
@@ -41,6 +42,8 @@ public class BaseGenerator{
         for(Block block : content.blocks()){
             if(block instanceof OreBlock && block.asFloor().itemDrop != null){
                 ores.put(block.asFloor().itemDrop, (OreBlock)block);
+            }else if(block.isFloor() && block.asFloor().itemDrop != null && !oreFloors.containsKey(block.asFloor().itemDrop)){
+                oreFloors.put(block.asFloor().itemDrop, block.asFloor());
             }
         }
 
@@ -73,7 +76,8 @@ public class BaseGenerator{
         pass(tile -> {
             if(!tile.block().alwaysReplace) return;
 
-            if((tile.drop() != null || (tile.floor().liquidDrop != null && Mathf.chance(nonResourceChance * 2))) && Mathf.chance(resourceChance)){
+            if(((tile.overlay().asFloor().itemDrop != null || (tile.drop() != null && Mathf.chance(nonResourceChance)))
+                || (tile.floor().liquidDrop != null && Mathf.chance(nonResourceChance * 2))) && Mathf.chance(resourceChance)){
                 Seq<BasePart> parts = bases.forResource(tile.drop() != null ? tile.drop() : tile.floor().liquidDrop);
                 if(!parts.isEmpty()){
                     tryPlace(parts.random(), tile.x, tile.y);
@@ -94,10 +98,6 @@ public class BaseGenerator{
 
             //small walls
             pass(tile -> {
-                //no walls around cores
-                if(cores.contains(t -> t.within(tile, (3 + 4) * tilesize))){
-                    return;
-                }
 
                 if(tile.block().alwaysReplace){
                     boolean any = false;
@@ -175,19 +175,20 @@ public class BaseGenerator{
         }
 
         if(part.required instanceof Item){
+            Item item = (Item)part.required;
             for(Stile tile : result.tiles){
                 if(tile.block instanceof Drill){
 
                     tile.block.iterateTaken(tile.x + cx, tile.y + cy, (ex, ey) -> {
 
                         if(!tiles.getn(ex, ey).floor().isLiquid){
-                            tiles.getn(ex, ey).setOverlay(ores.get((Item)part.required));
+                            set(tiles.getn(ex, ey), item);
                         }
 
                         Tile rand = tiles.getc(ex + Mathf.range(1), ey + Mathf.range(1));
                         if(!rand.floor().isLiquid){
                             //random ores nearby to make it look more natural
-                            rand.setOverlay(ores.get((Item)part.required));
+                            set(rand, item);
                         }
                     });
                 }
@@ -196,9 +197,32 @@ public class BaseGenerator{
 
         Schematics.place(result, cx + result.width/2, cy + result.height/2, team);
 
+        //fill drills with items after placing
+        if(part.required instanceof Item){
+            Item item = (Item)part.required;
+            for(Stile tile : result.tiles){
+                if(tile.block instanceof Drill){
+
+                    Building build = world.tile(tile.x + cx, tile.y + cy).build;
+
+                    if(build != null){
+                        build.items.add(item, build.block.itemCapacity);
+                    }
+                }
+            }
+        }
+
         return true;
     }
 
+    void set(Tile tile, Item item){
+        if(ores.containsKey(item)){
+            tile.setOverlay(ores.get(item));
+        }else if(oreFloors.containsKey(item)){
+            tile.setFloor(oreFloors.get(item));
+        }
+    }
+
     boolean isTaken(Block block, int x, int y){
         int offsetx = -(block.size - 1) / 2;
         int offsety = -(block.size - 1) / 2;
diff --git a/core/src/mindustry/world/Tile.java b/core/src/mindustry/world/Tile.java
index 482724699a..268888a45e 100644
--- a/core/src/mindustry/world/Tile.java
+++ b/core/src/mindustry/world/Tile.java
@@ -326,7 +326,7 @@ public class Tile implements Position, QuadTreeObject, Displayable{
         setOverlay(content.block(ore));
     }
 
-    public void setOverlay(Block block){
+    public void setOverlay(@NonNull Block block){
         this.overlay = (Floor)block;
 
         recache();
