From 4ca4e0c16a2d1bc7ba010f77e3145163de8d479a Mon Sep 17 00:00:00 2001
From: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Tue, 20 Jul 2021 19:47:30 +0100
Subject: [PATCH] Added new cavern sprites to caverns

---
 common/src/terrain/block.rs  |  6 +++-
 common/src/terrain/sprite.rs |  2 +-
 world/src/layer/mod.rs       | 58 ++++++++++++++++++++++--------------
 3 files changed, 41 insertions(+), 25 deletions(-)

diff --git a/common/src/terrain/block.rs b/common/src/terrain/block.rs
index 5365566f96..6ab58c9e1d 100644
--- a/common/src/terrain/block.rs
+++ b/common/src/terrain/block.rs
@@ -190,7 +190,11 @@ impl Block {
                 | SpriteKind::Orb => Some(16),
                 SpriteKind::Velorite
                 | SpriteKind::VeloriteFrag
-                | SpriteKind::Cauldron
+                | SpriteKind::CavernGrassBlueShort
+                | SpriteKind::CavernGrassBlueMedium
+                | SpriteKind::CavernGrassBlueLong
+                | SpriteKind::CavernLillypadBlue
+                | SpriteKind::CavernMycelBlue
                 | SpriteKind::CeilingMushroom => Some(6),
                 SpriteKind::CaveMushroom
                 | SpriteKind::CookingPot
diff --git a/common/src/terrain/sprite.rs b/common/src/terrain/sprite.rs
index 0a56b74d98..f8033004d1 100644
--- a/common/src/terrain/sprite.rs
+++ b/common/src/terrain/sprite.rs
@@ -267,7 +267,7 @@ impl SpriteKind {
             | SpriteKind::Tin
             | SpriteKind::Silver
             | SpriteKind::Gold => 0.6,
-            SpriteKind::EnsnaringVines => 0.1,
+            SpriteKind::EnsnaringVines | SpriteKind::CavernLillypadBlue => 0.1,
             _ => return None,
         })
     }
diff --git a/world/src/layer/mod.rs b/world/src/layer/mod.rs
index 0bd51d5efb..4d73d36424 100644
--- a/world/src/layer/mod.rs
+++ b/world/src/layer/mod.rs
@@ -743,9 +743,9 @@ pub fn apply_caverns_to<R: Rng>(canvas: &mut Canvas, dynamic_rng: &mut R) {
                 {
                     use SpriteKind::*;
                     let sprites = if dynamic_rng.gen_bool(0.1) {
-                        &[Beehive, Lantern]
+                        &[Beehive, Lantern] as &[_]
                     } else {
-                        &[Orb, Liana]
+                        &[Orb, CavernMycelBlue, CavernMycelBlue] as &[_]
                     };
                     return Some(Block::air(*sprites.choose(dynamic_rng).unwrap()));
                 }
@@ -860,42 +860,54 @@ pub fn apply_caverns_to<R: Rng>(canvas: &mut Canvas, dynamic_rng: &mut R) {
             } else if let Some(mushroom_block) = get_mushroom(wpos, dynamic_rng) {
                 mushroom_block
             } else if z > cavern_top - moss as i32 {
-                let kind = if dynamic_rng.gen_bool(0.05 / (1.0 + ((cavern_top - z).max(0) as f64).mul(0.1))) {
+                let kind = if dynamic_rng
+                    .gen_bool(0.05 / (1.0 + ((cavern_top - z).max(0) as f64).mul(0.1)))
+                {
                     BlockKind::GlowingMushroom
                 } else {
                     BlockKind::Leaves
                 };
                 Block::new(kind, Rgb::new(50, 120, 160))
             } else if z < water_level {
-                Block::water(SpriteKind::Empty)
-                    .with_sprite(if z == cavern_bottom + floor && dynamic_rng.gen_bool(0.01) {
+                Block::water(SpriteKind::Empty).with_sprite(
+                    if z == cavern_bottom + floor && dynamic_rng.gen_bool(0.01) {
                         SpriteKind::CaveMushroom
                     } else {
                         SpriteKind::Empty
-                    })
-            } else if z == cavern_bottom + floor && dynamic_rng.gen_bool(0.025) && on_ground {
+                    },
+                )
+            } else if z == water_level && dynamic_rng.gen_bool(0.01) && !on_ground {
+                Block::air(SpriteKind::CavernLillypadBlue)
+            } else if z == cavern_bottom + floor && dynamic_rng.gen_bool(0.1) && on_ground {
                 Block::air(
-                    *[
-                        CrystalLow,
-                        CaveMushroom,
-                        LeafyPlant,
-                        Fern,
-                        Reed,
-                        Pyrebloom,
-                        Moonbell,
-                        Welwitch,
-                        LargeGrass,
-                        LongGrass,
-                        MediumGrass,
-                        ShortGrass,
-                        GrassBlue,
-                    ]
+                    *if dynamic_rng.gen_bool(0.9) {
+                        &[
+                            CavernGrassBlueShort,
+                            CavernGrassBlueMedium,
+                            CavernGrassBlueLong,
+                        ] as &[_]
+                    } else {
+                        &[
+                            CaveMushroom,
+                            LeafyPlant,
+                            Fern,
+                            Reed,
+                            Pyrebloom,
+                            Moonbell,
+                            Welwitch,
+                            LargeGrass,
+                            LongGrass,
+                            MediumGrass,
+                            ShortGrass,
+                            GrassBlue,
+                        ] as &[_]
+                    }
                     .choose(dynamic_rng)
                     .unwrap(),
                 )
             } else if z == cavern_top - 1 && dynamic_rng.gen_bool(0.001) {
                 Block::air(
-                    *[CrystalHigh, CeilingMushroom, Orb]
+                    *[CrystalHigh, CeilingMushroom, Orb, CavernMycelBlue]
                         .choose(dynamic_rng)
                         .unwrap(),
                 )