diff --git a/core/assets-raw/sprites/blocks/environment/crystal-floor1.png b/core/assets-raw/sprites/blocks/environment/crystal-floor1.png new file mode 100644 index 0000000000..d2cbb258d5 Binary files /dev/null and b/core/assets-raw/sprites/blocks/environment/crystal-floor1.png differ diff --git a/core/assets-raw/sprites/blocks/environment/crystal-floor2.png b/core/assets-raw/sprites/blocks/environment/crystal-floor2.png new file mode 100644 index 0000000000..1be27393ab Binary files /dev/null and b/core/assets-raw/sprites/blocks/environment/crystal-floor2.png differ diff --git a/core/assets-raw/sprites/blocks/environment/crystal-floor3.png b/core/assets-raw/sprites/blocks/environment/crystal-floor3.png new file mode 100644 index 0000000000..f677063068 Binary files /dev/null and b/core/assets-raw/sprites/blocks/environment/crystal-floor3.png differ diff --git a/core/assets-raw/sprites/blocks/environment/crystal-floor4.png b/core/assets-raw/sprites/blocks/environment/crystal-floor4.png new file mode 100644 index 0000000000..da653b15ce Binary files /dev/null and b/core/assets-raw/sprites/blocks/environment/crystal-floor4.png differ diff --git a/core/assets-raw/sprites/blocks/environment/crystalline-stone-wall-large.png b/core/assets-raw/sprites/blocks/environment/crystalline-stone-wall-large.png new file mode 100644 index 0000000000..9d2bfdbb64 Binary files /dev/null and b/core/assets-raw/sprites/blocks/environment/crystalline-stone-wall-large.png differ diff --git a/core/assets-raw/sprites/blocks/environment/crystalline-stone-wall1.png b/core/assets-raw/sprites/blocks/environment/crystalline-stone-wall1.png new file mode 100644 index 0000000000..85d020c779 Binary files /dev/null and b/core/assets-raw/sprites/blocks/environment/crystalline-stone-wall1.png differ diff --git a/core/assets-raw/sprites/blocks/environment/crystalline-stone-wall2.png b/core/assets-raw/sprites/blocks/environment/crystalline-stone-wall2.png new file mode 100644 index 0000000000..6464cddee8 Binary files /dev/null and b/core/assets-raw/sprites/blocks/environment/crystalline-stone-wall2.png differ diff --git a/core/assets-raw/sprites/blocks/environment/crystalline-stone-wall3.png b/core/assets-raw/sprites/blocks/environment/crystalline-stone-wall3.png new file mode 100644 index 0000000000..019e90032c Binary files /dev/null and b/core/assets-raw/sprites/blocks/environment/crystalline-stone-wall3.png differ diff --git a/core/assets-raw/sprites/blocks/environment/crystalline-stone-wall4.png b/core/assets-raw/sprites/blocks/environment/crystalline-stone-wall4.png new file mode 100644 index 0000000000..60e70ffee6 Binary files /dev/null and b/core/assets-raw/sprites/blocks/environment/crystalline-stone-wall4.png differ diff --git a/core/assets-raw/sprites/blocks/environment/crystalline-stone1.png b/core/assets-raw/sprites/blocks/environment/crystalline-stone1.png new file mode 100644 index 0000000000..25549cfbaf Binary files /dev/null and b/core/assets-raw/sprites/blocks/environment/crystalline-stone1.png differ diff --git a/core/assets-raw/sprites/blocks/environment/crystalline-stone2.png b/core/assets-raw/sprites/blocks/environment/crystalline-stone2.png new file mode 100644 index 0000000000..7855ea476b Binary files /dev/null and b/core/assets-raw/sprites/blocks/environment/crystalline-stone2.png differ diff --git a/core/assets-raw/sprites/blocks/environment/crystalline-stone3.png b/core/assets-raw/sprites/blocks/environment/crystalline-stone3.png new file mode 100644 index 0000000000..63d6d7be2d Binary files /dev/null and b/core/assets-raw/sprites/blocks/environment/crystalline-stone3.png differ diff --git a/core/assets-raw/sprites/blocks/environment/crystalline-stone4.png b/core/assets-raw/sprites/blocks/environment/crystalline-stone4.png new file mode 100644 index 0000000000..d9a441075f Binary files /dev/null and b/core/assets-raw/sprites/blocks/environment/crystalline-stone4.png differ diff --git a/core/assets-raw/sprites/blocks/environment/crystalline-stone5.png b/core/assets-raw/sprites/blocks/environment/crystalline-stone5.png new file mode 100644 index 0000000000..e040f73d67 Binary files /dev/null and b/core/assets-raw/sprites/blocks/environment/crystalline-stone5.png differ diff --git a/core/assets-raw/sprites/blocks/environment/ore-crystal-thorium1.png b/core/assets-raw/sprites/blocks/environment/ore-crystal-thorium1.png index 5790f50c77..da724496a5 100644 Binary files a/core/assets-raw/sprites/blocks/environment/ore-crystal-thorium1.png and b/core/assets-raw/sprites/blocks/environment/ore-crystal-thorium1.png differ diff --git a/core/assets-raw/sprites/blocks/environment/ore-crystal-thorium2.png b/core/assets-raw/sprites/blocks/environment/ore-crystal-thorium2.png index ad5ab21dad..d71ae77293 100644 Binary files a/core/assets-raw/sprites/blocks/environment/ore-crystal-thorium2.png and b/core/assets-raw/sprites/blocks/environment/ore-crystal-thorium2.png differ diff --git a/core/assets-raw/sprites/blocks/environment/ore-crystal-thorium3.png b/core/assets-raw/sprites/blocks/environment/ore-crystal-thorium3.png index 7e8112349e..5790f50c77 100644 Binary files a/core/assets-raw/sprites/blocks/environment/ore-crystal-thorium3.png and b/core/assets-raw/sprites/blocks/environment/ore-crystal-thorium3.png differ diff --git a/core/assets-raw/sprites/blocks/props/arkyic-boulder-shadow1.png b/core/assets-raw/sprites/blocks/props/arkyic-boulder-shadow1.png new file mode 100644 index 0000000000..48dd992631 Binary files /dev/null and b/core/assets-raw/sprites/blocks/props/arkyic-boulder-shadow1.png differ diff --git a/core/assets-raw/sprites/blocks/props/arkyic-boulder-shadow2.png b/core/assets-raw/sprites/blocks/props/arkyic-boulder-shadow2.png new file mode 100644 index 0000000000..70157136b7 Binary files /dev/null and b/core/assets-raw/sprites/blocks/props/arkyic-boulder-shadow2.png differ diff --git a/core/assets-raw/sprites/blocks/props/arkyic-boulder-shadow3.png b/core/assets-raw/sprites/blocks/props/arkyic-boulder-shadow3.png new file mode 100644 index 0000000000..e509e055c2 Binary files /dev/null and b/core/assets-raw/sprites/blocks/props/arkyic-boulder-shadow3.png differ diff --git a/core/assets-raw/sprites/blocks/props/arkyic-boulder1.png b/core/assets-raw/sprites/blocks/props/arkyic-boulder1.png new file mode 100644 index 0000000000..bec5753b6a Binary files /dev/null and b/core/assets-raw/sprites/blocks/props/arkyic-boulder1.png differ diff --git a/core/assets-raw/sprites/blocks/props/arkyic-boulder2.png b/core/assets-raw/sprites/blocks/props/arkyic-boulder2.png new file mode 100644 index 0000000000..a9ecf43cdd Binary files /dev/null and b/core/assets-raw/sprites/blocks/props/arkyic-boulder2.png differ diff --git a/core/assets-raw/sprites/blocks/props/arkyic-boulder3.png b/core/assets-raw/sprites/blocks/props/arkyic-boulder3.png new file mode 100644 index 0000000000..9e9f5ccafc Binary files /dev/null and b/core/assets-raw/sprites/blocks/props/arkyic-boulder3.png differ diff --git a/core/assets-raw/sprites/blocks/props/crystal-cluster-shadow1.png b/core/assets-raw/sprites/blocks/props/crystal-cluster-shadow1.png new file mode 100644 index 0000000000..d24059e180 Binary files /dev/null and b/core/assets-raw/sprites/blocks/props/crystal-cluster-shadow1.png differ diff --git a/core/assets-raw/sprites/blocks/props/crystal-cluster-shadow2.png b/core/assets-raw/sprites/blocks/props/crystal-cluster-shadow2.png new file mode 100644 index 0000000000..7c3a8a3f9b Binary files /dev/null and b/core/assets-raw/sprites/blocks/props/crystal-cluster-shadow2.png differ diff --git a/core/assets-raw/sprites/blocks/props/crystal-cluster-shadow3.png b/core/assets-raw/sprites/blocks/props/crystal-cluster-shadow3.png new file mode 100644 index 0000000000..575e8c390b Binary files /dev/null and b/core/assets-raw/sprites/blocks/props/crystal-cluster-shadow3.png differ diff --git a/core/assets-raw/sprites/blocks/props/crystal-cluster1.png b/core/assets-raw/sprites/blocks/props/crystal-cluster1.png new file mode 100644 index 0000000000..5adf9a96e0 Binary files /dev/null and b/core/assets-raw/sprites/blocks/props/crystal-cluster1.png differ diff --git a/core/assets-raw/sprites/blocks/props/crystal-cluster2.png b/core/assets-raw/sprites/blocks/props/crystal-cluster2.png new file mode 100644 index 0000000000..40a03531c3 Binary files /dev/null and b/core/assets-raw/sprites/blocks/props/crystal-cluster2.png differ diff --git a/core/assets-raw/sprites/blocks/props/crystal-cluster3.png b/core/assets-raw/sprites/blocks/props/crystal-cluster3.png new file mode 100644 index 0000000000..d9ba7e96e0 Binary files /dev/null and b/core/assets-raw/sprites/blocks/props/crystal-cluster3.png differ diff --git a/core/assets-raw/sprites/blocks/props/crystalline-boulder1.png b/core/assets-raw/sprites/blocks/props/crystalline-boulder1.png new file mode 100644 index 0000000000..95d583a192 Binary files /dev/null and b/core/assets-raw/sprites/blocks/props/crystalline-boulder1.png differ diff --git a/core/assets-raw/sprites/blocks/props/crystalline-boulder2.png b/core/assets-raw/sprites/blocks/props/crystalline-boulder2.png new file mode 100644 index 0000000000..d94d92be6b Binary files /dev/null and b/core/assets-raw/sprites/blocks/props/crystalline-boulder2.png differ diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index dba21cc9e6..d00da281b6 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -499,3 +499,9 @@ 63205=ore-crystal-thorium|block-ore-crystal-thorium-ui 63204=ore-wall-beryllium|block-ore-wall-beryllium-ui 63203=ore-wall-tungsten|block-ore-wall-tungsten-ui +63202=arkyic-boulder|block-arkyic-boulder-ui +63201=crystalline-stone|block-crystalline-stone-ui +63200=crystalline-stone-wall|block-crystalline-stone-wall-ui +63199=crystal-cluster|block-crystal-cluster-ui +63198=crystalline-boulder|block-crystalline-boulder-ui +63197=crystal-floor|block-crystal-floor-ui diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index c125c43533..3ed804cf44 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -45,10 +45,11 @@ public class Blocks{ redmat, bluemat, stoneWall, dirtWall, sporeWall, iceWall, daciteWall, sporePine, snowPine, pine, shrubs, whiteTree, whiteTreeDead, sporeCluster, redweed, purbush, coralChunk, yellowCoral, - regolithWall, yellowStoneWall, rhyoliteWall, steamVent, carbonWall, redIceWall, ferricStoneWall, beryllicStoneWall, arkyicWall, - ferricStone, ferricCraters, carbonStone, beryllicStone, + regolithWall, yellowStoneWall, rhyoliteWall, steamVent, carbonWall, redIceWall, ferricStoneWall, beryllicStoneWall, arkyicWall, crystallineStoneWall, + ferricStone, ferricCraters, carbonStone, beryllicStone, crystallineStone, crystalFloor, iceSnow, sandWater, darksandWater, duneWall, sandWall, moss, sporeMoss, shale, shaleWall, grass, salt, - shaleBoulder, sandBoulder, daciteBoulder, boulder, snowBoulder, basaltBoulder, carbonBoulder, ferricBoulder, beryllicBoulder, yellowStoneBoulder, + //boulders + shaleBoulder, sandBoulder, daciteBoulder, boulder, snowBoulder, basaltBoulder, carbonBoulder, ferricBoulder, beryllicBoulder, yellowStoneBoulder, arkyicBoulder, crystalCluster, crystallineBoulder, metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor4, metalFloor5, basalt, magmarock, hotrock, snowWall, saltWall, darkPanel1, darkPanel2, darkPanel3, darkPanel4, darkPanel5, darkPanel6, darkMetal, pebbles, tendrils, @@ -398,6 +399,14 @@ public class Blocks{ variants = 4; }}; + crystallineStone = new Floor("crystalline-stone"){{ + variants = 5; + }}; + + crystalFloor = new Floor("crystal-floor"){{ + variants = 4; + }}; + redIce = new Floor("red-ice"){{ //TODO red ice boulder dragMultiplier = 0.4f; @@ -530,6 +539,11 @@ public class Blocks{ arkyciteFloor.asFloor().wall = arkyicStone.asFloor().wall = this; }}; + crystallineStoneWall = new StaticWall("crystalline-stone-wall"){{ + variants = 4; + crystallineStone.asFloor().wall = crystalFloor.asFloor().wall = this; + }}; + redIceWall = new StaticWall("red-ice-wall"){{ redIce.asFloor().wall = this; }}; @@ -636,6 +650,24 @@ public class Blocks{ yellowStone.asFloor().decoration = regolith.asFloor().decoration = this; }}; + //1px outline + 4.50 gaussian shadow in gimp + arkyicBoulder = new Prop("arkyic-boulder"){{ + variants = 3; + customShadow = true; + arkyicStone.asFloor().decoration = this; + }}; + + //TODO better visuals, maybe make tree + crystalCluster = new TallBlock("crystal-cluster"){{ + variants = 3; + clipSize = 128f; + }}; + + crystallineBoulder = new Prop("crystalline-boulder"){{ + variants = 2; + crystallineStone.asFloor().decoration = this; + }}; + metalFloor = new Floor("metal-floor", 0); metalFloorDamaged = new Floor("metal-floor-damaged", 3); diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index c31e160f3f..ef9f4541d2 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -1031,12 +1031,6 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, } } - public void drawCustomShadow(){ - Draw.color(0f, 0f, 0f, BlockRenderer.shadowColor.a); - Draw.rect(block.customShadowRegion, x, y, drawrot()); - Draw.color(); - } - public void drawCracks(){ if(!damaged() || block.size > BlockRenderer.maxCrackSize) return; int id = pos(); diff --git a/core/src/mindustry/graphics/BlockRenderer.java b/core/src/mindustry/graphics/BlockRenderer.java index 44d5ad9298..138b92679b 100644 --- a/core/src/mindustry/graphics/BlockRenderer.java +++ b/core/src/mindustry/graphics/BlockRenderer.java @@ -368,12 +368,13 @@ public class BlockRenderer{ Draw.reset(); Draw.z(Layer.block); + if(block.customShadow){ + Draw.z(Layer.block - 1); + block.drawShadow(tile); + Draw.z(Layer.block); + } + if(entity != null){ - if(block.customShadow){ - Draw.z(Layer.block - 1); - entity.drawCustomShadow(); - Draw.z(Layer.block); - } if(entity.damaged()){ entity.drawCracks(); diff --git a/core/src/mindustry/maps/generators/BasicGenerator.java b/core/src/mindustry/maps/generators/BasicGenerator.java index 843a65455f..a3a1754dba 100644 --- a/core/src/mindustry/maps/generators/BasicGenerator.java +++ b/core/src/mindustry/maps/generators/BasicGenerator.java @@ -364,6 +364,21 @@ public abstract class BasicGenerator implements WorldGenerator{ return false; } + public boolean near(int cx, int cy, int rad, Block block){ + for(int x = -rad; x <= rad; x++){ + for(int y = -rad; y <= rad; y++){ + int wx = cx + x, wy = cy + y; + if(Structs.inBounds(wx, wy, width, height) && Mathf.within(x, y, rad)){ + Tile other = tiles.getn(wx, wy); + if(other.block() == block){ + return true; + } + } + } + } + return false; + } + public void decoration(float chance){ pass((x, y) -> { for(int i = 0; i < 4; i++){ diff --git a/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java b/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java index 9eb55371a5..1692fdaed6 100644 --- a/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java +++ b/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java @@ -24,7 +24,8 @@ public class ErekirPlanetGenerator extends PlanetGenerator{ public float heightScl = 0.9f, octaves = 8, persistence = 0.7f, heightPow = 3f, heightMult = 1.6f; Block[][] arr = { - {Blocks.regolith, Blocks.regolith, Blocks.yellowStone, Blocks.rhyolite, Blocks.basalt} + //{Blocks.regolith, Blocks.regolith, Blocks.yellowStone, Blocks.rhyolite, Blocks.basalt} + {Blocks.regolith, Blocks.regolith, Blocks.yellowStone, Blocks.crystallineStone, Blocks.basalt} }; @Override @@ -210,9 +211,17 @@ public class ErekirPlanetGenerator extends PlanetGenerator{ } //TODO design ore generation so it doesn't overlap - if(noise(x + 999, y + 600, 4, 0.63f, 50f, 1f) < 0.2f/* && floor == Blocks.yellowStone*/){ - ore = Blocks.oreThorium; + if(noise(x + 999, y + 600 - x, 4, 0.63f, 50f, 1f) < 0.25f && floor == Blocks.crystallineStone){ + ore = Blocks.oreCrystalThorium; } + + if(noise(x + 999, y + 600 - x, 5, 0.8f, 50f, 1f) < 0.38f && floor == Blocks.crystallineStone){ + floor = Blocks.crystalFloor; + } + } + + if(block == Blocks.air && floor == Blocks.crystallineStone && rand.chance(0.08) && nearWall(x, y) && !near(x, y, 4, Blocks.crystalCluster)){ + block = Blocks.crystalCluster; } }); diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index ed0744734c..f1128cc5ba 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -294,7 +294,7 @@ public class Block extends UnlockableContent{ public TextureRegion region, editorIcon; public @Load("@-shadow") TextureRegion customShadowRegion; public @Load("@-team") TextureRegion teamRegion; - public TextureRegion[] teamRegions, variantRegions; + public TextureRegion[] teamRegions, variantRegions, variantShadowRegions; protected static final Seq tempTiles = new Seq<>(); protected static final Seq tempTileEnts = new Seq<>(); @@ -314,14 +314,22 @@ public class Block extends UnlockableContent{ if(tile.build != null){ tile.build.draw(); }else{ - if(variants == 0){ - Draw.rect(region, tile.drawx(), tile.drawy()); - }else{ - Draw.rect(variantRegions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, variantRegions.length - 1))], tile.drawx(), tile.drawy()); - } + Draw.rect( + variants == 0 ? region : + variantRegions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, variantRegions.length - 1))], + tile.drawx(), tile.drawy()); } } + public void drawShadow(Tile tile){ + Draw.color(0f, 0f, 0f, BlockRenderer.shadowColor.a); + Draw.rect( + variants == 0 ? customShadowRegion : + variantShadowRegions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, variantShadowRegions.length - 1))], + tile.drawx(), tile.drawy(), tile.build == null ? 0f : tile.build.drawrot()); + Draw.color(); + } + public float percentSolid(int x, int y){ Tile tile = world.tile(x, y); if(tile == null) return 0; @@ -1019,6 +1027,13 @@ public class Block extends UnlockableContent{ variantRegions[i] = Core.atlas.find(name + (i + 1)); } region = variantRegions[0]; + + if(customShadow){ + variantShadowRegions = new TextureRegion[variants]; + for(int i = 0; i < variants; i++){ + variantShadowRegions[i] = Core.atlas.find(name + "-shadow" + (i + 1)); + } + } } } diff --git a/core/src/mindustry/world/blocks/environment/TallBlock.java b/core/src/mindustry/world/blocks/environment/TallBlock.java new file mode 100644 index 0000000000..cf3334b4f3 --- /dev/null +++ b/core/src/mindustry/world/blocks/environment/TallBlock.java @@ -0,0 +1,53 @@ +package mindustry.world.blocks.environment; + +import arc.*; +import arc.graphics.g2d.*; +import arc.math.*; +import mindustry.graphics.*; +import mindustry.world.*; + +//I don't know what else to call this. It's not a prop, it's not a tree. +public class TallBlock extends Block{ + public float shadowOffset = -3f; + public float layer = Layer.power + 1; + public float rotationRand = 20f; + + public TallBlock(String name){ + super(name); + solid = true; + clipSize = 90; + customShadow = true; + } + + @Override + public void init(){ + super.init(); + hasShadow = true; + } + + @Override + public void drawBase(Tile tile){ + float rot = Mathf.randomSeedRange(tile.pos() + 1, rotationRand); + + Draw.z(Layer.power - 1); + Draw.color(0f, 0f, 0f, 0.6f); + Draw.rect(variants > 0 ? variantShadowRegions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, variantShadowRegions.length - 1))] : customShadowRegion, + tile.worldx() + shadowOffset, tile.worldy() + shadowOffset, rot); + + Draw.color(); + + Draw.z(Layer.power + 1); + Draw.rect(variants > 0 ? variantRegions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, variantRegions.length - 1))] : region, + tile.worldx(), tile.worldy(), rot); + } + + @Override + public void drawShadow(Tile tile){ + + } + + @Override + public TextureRegion[] icons(){ + return variants == 0 ? super.icons() : new TextureRegion[]{Core.atlas.find(name + "1")}; + } +}