diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0444ed08f4..4e0e3836de 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ### Added
 
-- Plugin can now retrieve data from ECS 
+- Plugin can now retrieve data from ECS
 - Added chat commands for inviting, kicking, leaving, and promoting in groups
 - Aura system
 - Campfire resting heal
@@ -35,6 +35,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 - Support for dual wielding (not accessible as animations still needed)
 - Support for modular weapons.
 - Saturation buff (healing from food) now queues
+- Coral reefs, kelp forests, and seagrass
 
 ### Changed
 
diff --git a/assets/common/items/armor/neck/neck_2.ron b/assets/common/items/armor/neck/neck_2.ron
new file mode 100644
index 0000000000..9a17ee9d0c
--- /dev/null
+++ b/assets/common/items/armor/neck/neck_2.ron
@@ -0,0 +1,13 @@
+ItemDef(
+    name: "Seashell Necklace",
+    description: "Contains the guardian aura of the ocean",
+    kind: Armor((
+        kind: Neck("NeckShell"),
+        stats: (
+            protection: Normal(2.0),
+            poise_resilience: Normal(1.0),
+        ),
+    )),
+    quality: Moderate,
+    tags: [],
+)
diff --git a/assets/common/items/crafting_ing/seashells.ron b/assets/common/items/crafting_ing/seashells.ron
new file mode 100644
index 0000000000..b3d25994db
--- /dev/null
+++ b/assets/common/items/crafting_ing/seashells.ron
@@ -0,0 +1,9 @@
+ItemDef(
+    name: "Seashells",
+    description: "Shells from a sea creture.",
+    kind: Ingredient(
+        kind: "Seashells",
+    ),
+    quality: Common,
+    tags: [],
+)
diff --git a/assets/common/recipe_book.ron b/assets/common/recipe_book.ron
index 974602a42a..55e99c003c 100644
--- a/assets/common/recipe_book.ron
+++ b/assets/common/recipe_book.ron
@@ -279,6 +279,15 @@
         ("common.items.armor.shoulder.leather_adventurer", 1),
         [(Item("common.items.crafting_ing.leather_scraps"), 12)],
     ),
+    "Seashell Necklace": (
+        ("common.items.armor.neck.neck_2", 1),
+        [
+            (Item("common.items.crafting_ing.cloth_scraps"), 2),
+            (Item("common.items.crafting_ing.sapphire"), 1),
+            (Item("common.items.crafting_ing.seashells"), 3),
+            (Item("common.items.crafting_tools.sewing_set"), 0),
+        ],
+    ),
     "red cloth": (
         ("common.items.crafting_ing.cloth_scraps_red", 1),
         [
diff --git a/assets/voxygen/element/icons/neck-seashell.png b/assets/voxygen/element/icons/neck-seashell.png
new file mode 100644
index 0000000000..1190bf0f3b
Binary files /dev/null and b/assets/voxygen/element/icons/neck-seashell.png differ
diff --git a/assets/voxygen/item_image_manifest.ron b/assets/voxygen/item_image_manifest.ron
index ec45a3fbf1..3e311bd606 100644
--- a/assets/voxygen/item_image_manifest.ron
+++ b/assets/voxygen/item_image_manifest.ron
@@ -813,23 +813,23 @@
     Tool("common.items.weapons.sceptre.totem_green"): VoxTrans(
         "voxel.weapon.sceptre.totem_green",
         (1.0, -1.0, 0.0), (-130., 90.0, 0.0), 1.2,
-    ), 
+    ),
     Tool("common.items.weapons.sceptre.root_green0"): VoxTrans(
         "voxel.weapon.sceptre.root_green",
         (1.0, -1.0, 0.0), (-130., 90.0, 0.0), 1.2,
-    ), 
+    ),
     Tool("common.items.weapons.sceptre.fork0"): VoxTrans(
         "voxel.weapon.sceptre.fork",
         (1.0, -1.0, 0.0), (-130., 90.0, 0.0), 1.2,
-    ), 
+    ),
     Tool("common.items.weapons.sceptre.loops0"): VoxTrans(
         "voxel.weapon.sceptre.loops",
         (1.0, -1.0, 0.0), (-130., 90.0, 0.0), 1.2,
-    ), 
+    ),
     Tool("common.items.weapons.sceptre.root_evil"): VoxTrans(
         "voxel.weapon.sceptre.root_evil",
         (1.0, -1.0, 0.0), (-130., 90.0, 0.0), 1.2,
-    ), 
+    ),
      Tool("common.items.weapons.sceptre.sceptre_velorite_0"): VoxTrans(
         "voxel.weapon.sceptre.ore-nature",
         (1.0, -1.0, 0.0), (-130., 90.0, 0.0), 1.15,
@@ -1523,6 +1523,10 @@
     Armor(Neck("Neck1")): Png(
         "element.icons.neck-1",
     ),
+    Armor(Neck("NeckShell")): Png(
+    "element.icons.neck-seashell",
+    ),
+
     // Tabards
     Armor(Tabard("Admin")): Png(
         "element.icons.tabard_admin",
@@ -1711,6 +1715,10 @@
         "voxel.sprite.rocks.rock-0",
         (0.0, 0.0, 0.0), (-50.0, 40.0, 20.0), 0.8,
     ),
+    Ingredient("Seashells"): VoxTrans(
+    "voxel.sprite.seashells.shell-0",
+    (0.0, 0.0, 0.0), (-50.0, 40.0, 20.0), 0.8,
+    ),
     Ingredient("IcyShard"): Png(
         "element.icons.item_ice_shard",
     ),
diff --git a/assets/voxygen/voxel/sprite/algae/acetabularia-0.vox b/assets/voxygen/voxel/sprite/algae/acetabularia-0.vox
new file mode 100644
index 0000000000..67a7a02f11
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/acetabularia-0.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/acetabularia-1.vox b/assets/voxygen/voxel/sprite/algae/acetabularia-1.vox
new file mode 100644
index 0000000000..bfbaf859f2
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/acetabularia-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/acetabularia-2.vox b/assets/voxygen/voxel/sprite/algae/acetabularia-2.vox
new file mode 100644
index 0000000000..3c29a7ca02
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/acetabularia-2.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/caulerpa_lentillifera-0.vox b/assets/voxygen/voxel/sprite/algae/caulerpa_lentillifera-0.vox
new file mode 100644
index 0000000000..e4ea91c940
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/caulerpa_lentillifera-0.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/caulerpa_lentillifera-1.vox b/assets/voxygen/voxel/sprite/algae/caulerpa_lentillifera-1.vox
new file mode 100644
index 0000000000..34decb2d16
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/caulerpa_lentillifera-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/caulerpa_lentillifera-2.vox b/assets/voxygen/voxel/sprite/algae/caulerpa_lentillifera-2.vox
new file mode 100644
index 0000000000..1787983b68
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/caulerpa_lentillifera-2.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/caulerpa_lentillifera-3.vox b/assets/voxygen/voxel/sprite/algae/caulerpa_lentillifera-3.vox
new file mode 100644
index 0000000000..98d812f6f8
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/caulerpa_lentillifera-3.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/caulerpa_prolifera-0.vox b/assets/voxygen/voxel/sprite/algae/caulerpa_prolifera-0.vox
new file mode 100644
index 0000000000..e4393db3ff
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/caulerpa_prolifera-0.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/caulerpa_prolifera-1.vox b/assets/voxygen/voxel/sprite/algae/caulerpa_prolifera-1.vox
new file mode 100644
index 0000000000..8a0eb4fc43
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/caulerpa_prolifera-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/caulerpa_prolifera-2.vox b/assets/voxygen/voxel/sprite/algae/caulerpa_prolifera-2.vox
new file mode 100644
index 0000000000..4b3967d30d
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/caulerpa_prolifera-2.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/caulerpa_prolifera-3.vox b/assets/voxygen/voxel/sprite/algae/caulerpa_prolifera-3.vox
new file mode 100644
index 0000000000..ebaa0e8e90
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/caulerpa_prolifera-3.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/kelp_sprig-0.vox b/assets/voxygen/voxel/sprite/algae/kelp_sprig-0.vox
new file mode 100644
index 0000000000..3cd6dd4205
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/kelp_sprig-0.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/kelp_sprig-1.vox b/assets/voxygen/voxel/sprite/algae/kelp_sprig-1.vox
new file mode 100644
index 0000000000..64a3649ff3
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/kelp_sprig-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/macrocystis_kelp-0.vox b/assets/voxygen/voxel/sprite/algae/macrocystis_kelp-0.vox
new file mode 100644
index 0000000000..3c59ca8775
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/macrocystis_kelp-0.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/macrocystis_kelp-1.vox b/assets/voxygen/voxel/sprite/algae/macrocystis_kelp-1.vox
new file mode 100644
index 0000000000..ddd9e3f246
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/macrocystis_kelp-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/macrocystis_kelp-2.vox b/assets/voxygen/voxel/sprite/algae/macrocystis_kelp-2.vox
new file mode 100644
index 0000000000..fefc3a16de
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/macrocystis_kelp-2.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/macrocystis_kelp-3.vox b/assets/voxygen/voxel/sprite/algae/macrocystis_kelp-3.vox
new file mode 100644
index 0000000000..282289caa2
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/macrocystis_kelp-3.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-0.vox b/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-0.vox
new file mode 100644
index 0000000000..7bc8001ef5
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-0.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-1.vox b/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-1.vox
new file mode 100644
index 0000000000..29267144e4
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-2.vox b/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-2.vox
new file mode 100644
index 0000000000..199c6be42a
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-2.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-3.vox b/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-3.vox
new file mode 100644
index 0000000000..154076a80f
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-3.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-4.vox b/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-4.vox
new file mode 100644
index 0000000000..83257e6389
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-4.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-5.vox b/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-5.vox
new file mode 100644
index 0000000000..519e7ddeac
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-5.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-6.vox b/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-6.vox
new file mode 100644
index 0000000000..0c29eeae3c
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-6.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-7.vox b/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-7.vox
new file mode 100644
index 0000000000..d8f9bd4d91
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-7.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-8.vox b/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-8.vox
new file mode 100644
index 0000000000..b68c2fb5ab
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/nereocystis_kelp-8.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/udotea-0.vox b/assets/voxygen/voxel/sprite/algae/udotea-0.vox
new file mode 100644
index 0000000000..1dff4df644
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/udotea-0.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/udotea-1.vox b/assets/voxygen/voxel/sprite/algae/udotea-1.vox
new file mode 100644
index 0000000000..2ee2f96741
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/udotea-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/algae/udotea-2.vox b/assets/voxygen/voxel/sprite/algae/udotea-2.vox
new file mode 100644
index 0000000000..b97d9013c6
Binary files /dev/null and b/assets/voxygen/voxel/sprite/algae/udotea-2.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/blue_ricordea-1.vox b/assets/voxygen/voxel/sprite/coral/blue_ricordea-1.vox
new file mode 100644
index 0000000000..0e075555ff
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/blue_ricordea-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/blue_ricordea-2.vox b/assets/voxygen/voxel/sprite/coral/blue_ricordea-2.vox
new file mode 100644
index 0000000000..8c4dd0ab76
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/blue_ricordea-2.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/blue_ricordea-3.vox b/assets/voxygen/voxel/sprite/coral/blue_ricordea-3.vox
new file mode 100644
index 0000000000..9362387a5e
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/blue_ricordea-3.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/green_brain_coral-0.vox b/assets/voxygen/voxel/sprite/coral/green_brain_coral-0.vox
new file mode 100644
index 0000000000..5f34fc2598
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/green_brain_coral-0.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/green_brain_coral-1.vox b/assets/voxygen/voxel/sprite/coral/green_brain_coral-1.vox
new file mode 100644
index 0000000000..7cd9dbc4b2
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/green_brain_coral-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/green_brain_coral-2.vox b/assets/voxygen/voxel/sprite/coral/green_brain_coral-2.vox
new file mode 100644
index 0000000000..a154d7a0c4
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/green_brain_coral-2.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/green_ricordea-1.vox b/assets/voxygen/voxel/sprite/coral/green_ricordea-1.vox
new file mode 100644
index 0000000000..80713353cc
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/green_ricordea-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/green_ricordea-2.vox b/assets/voxygen/voxel/sprite/coral/green_ricordea-2.vox
new file mode 100644
index 0000000000..bcba68ca5e
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/green_ricordea-2.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/green_ricordea-3.vox b/assets/voxygen/voxel/sprite/coral/green_ricordea-3.vox
new file mode 100644
index 0000000000..79dde3496d
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/green_ricordea-3.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/green_ricordea-4.vox b/assets/voxygen/voxel/sprite/coral/green_ricordea-4.vox
new file mode 100644
index 0000000000..55d85d3d19
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/green_ricordea-4.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/pink_birdsnest_coral-0.vox b/assets/voxygen/voxel/sprite/coral/pink_birdsnest_coral-0.vox
new file mode 100644
index 0000000000..c0ca88293c
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/pink_birdsnest_coral-0.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/pink_birdsnest_coral-1.vox b/assets/voxygen/voxel/sprite/coral/pink_birdsnest_coral-1.vox
new file mode 100644
index 0000000000..ac5042ddf4
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/pink_birdsnest_coral-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/pink_birdsnest_coral-2.vox b/assets/voxygen/voxel/sprite/coral/pink_birdsnest_coral-2.vox
new file mode 100644
index 0000000000..da83b02cbb
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/pink_birdsnest_coral-2.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/pink_birdsnest_coral-3.vox b/assets/voxygen/voxel/sprite/coral/pink_birdsnest_coral-3.vox
new file mode 100644
index 0000000000..8d82597b27
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/pink_birdsnest_coral-3.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/pink_brain_coral-0.vox b/assets/voxygen/voxel/sprite/coral/pink_brain_coral-0.vox
new file mode 100644
index 0000000000..27b229dba1
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/pink_brain_coral-0.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/pink_brain_coral-1.vox b/assets/voxygen/voxel/sprite/coral/pink_brain_coral-1.vox
new file mode 100644
index 0000000000..382ce5dbd0
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/pink_brain_coral-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/plating_acropora-0.vox b/assets/voxygen/voxel/sprite/coral/plating_acropora-0.vox
new file mode 100644
index 0000000000..03252da6ce
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/plating_acropora-0.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/plating_acropora-1.vox b/assets/voxygen/voxel/sprite/coral/plating_acropora-1.vox
new file mode 100644
index 0000000000..3e7321c7cf
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/plating_acropora-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/plating_acropora-2.vox b/assets/voxygen/voxel/sprite/coral/plating_acropora-2.vox
new file mode 100644
index 0000000000..db9071558e
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/plating_acropora-2.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/plating_acropora-3.vox b/assets/voxygen/voxel/sprite/coral/plating_acropora-3.vox
new file mode 100644
index 0000000000..adb3be4174
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/plating_acropora-3.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/plating_acropora-4.vox b/assets/voxygen/voxel/sprite/coral/plating_acropora-4.vox
new file mode 100644
index 0000000000..60cb91ac3e
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/plating_acropora-4.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/plating_acropora-5.vox b/assets/voxygen/voxel/sprite/coral/plating_acropora-5.vox
new file mode 100644
index 0000000000..f7ce39c2ed
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/plating_acropora-5.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/plating_acropora-6.vox b/assets/voxygen/voxel/sprite/coral/plating_acropora-6.vox
new file mode 100644
index 0000000000..af7acae3dd
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/plating_acropora-6.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/plating_acropora-7.vox b/assets/voxygen/voxel/sprite/coral/plating_acropora-7.vox
new file mode 100644
index 0000000000..873700a706
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/plating_acropora-7.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/purp-0.vox b/assets/voxygen/voxel/sprite/coral/purp-0.vox
new file mode 100644
index 0000000000..bf5d707745
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/purp-0.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/purp-1.vox b/assets/voxygen/voxel/sprite/coral/purp-1.vox
new file mode 100644
index 0000000000..21e1464752
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/purp-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/purple_finger_soft_coral-0.vox b/assets/voxygen/voxel/sprite/coral/purple_finger_soft_coral-0.vox
new file mode 100644
index 0000000000..2df740751c
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/purple_finger_soft_coral-0.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/purple_finger_soft_coral-1.vox b/assets/voxygen/voxel/sprite/coral/purple_finger_soft_coral-1.vox
new file mode 100644
index 0000000000..e8f3e7c617
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/purple_finger_soft_coral-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/red_fire_coral-0.vox b/assets/voxygen/voxel/sprite/coral/red_fire_coral-0.vox
new file mode 100644
index 0000000000..4d81974bce
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/red_fire_coral-0.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/red_fire_coral-1.vox b/assets/voxygen/voxel/sprite/coral/red_fire_coral-1.vox
new file mode 100644
index 0000000000..fdd632497f
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/red_fire_coral-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/red_fire_coral-2.vox b/assets/voxygen/voxel/sprite/coral/red_fire_coral-2.vox
new file mode 100644
index 0000000000..12cf9b709e
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/red_fire_coral-2.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/red_sea_fan-1.vox b/assets/voxygen/voxel/sprite/coral/red_sea_fan-1.vox
new file mode 100644
index 0000000000..ab7b10a9f6
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/red_sea_fan-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/red_sea_fan-2.vox b/assets/voxygen/voxel/sprite/coral/red_sea_fan-2.vox
new file mode 100644
index 0000000000..cd09987476
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/red_sea_fan-2.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/red_sea_fan-3.vox b/assets/voxygen/voxel/sprite/coral/red_sea_fan-3.vox
new file mode 100644
index 0000000000..11169e0a8c
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/red_sea_fan-3.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/red_sea_fan-4.vox b/assets/voxygen/voxel/sprite/coral/red_sea_fan-4.vox
new file mode 100644
index 0000000000..f3a5cee4f7
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/red_sea_fan-4.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/sea_anemone-1.vox b/assets/voxygen/voxel/sprite/coral/sea_anemone-1.vox
new file mode 100644
index 0000000000..ab9afa9b02
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/sea_anemone-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/yellow_fire_coral-0.vox b/assets/voxygen/voxel/sprite/coral/yellow_fire_coral-0.vox
new file mode 100644
index 0000000000..3a20707ce2
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/yellow_fire_coral-0.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/yellow_gorgonian-0.vox b/assets/voxygen/voxel/sprite/coral/yellow_gorgonian-0.vox
new file mode 100644
index 0000000000..5c5943fc32
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/yellow_gorgonian-0.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/yellow_gorgonian-1.vox b/assets/voxygen/voxel/sprite/coral/yellow_gorgonian-1.vox
new file mode 100644
index 0000000000..cdec31ee74
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/yellow_gorgonian-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/coral/yellow_gorgonian-2.vox b/assets/voxygen/voxel/sprite/coral/yellow_gorgonian-2.vox
new file mode 100644
index 0000000000..baa784d663
Binary files /dev/null and b/assets/voxygen/voxel/sprite/coral/yellow_gorgonian-2.vox differ
diff --git a/assets/voxygen/voxel/sprite/grass/seagrass-0.vox b/assets/voxygen/voxel/sprite/grass/seagrass-0.vox
new file mode 100644
index 0000000000..a955226d04
Binary files /dev/null and b/assets/voxygen/voxel/sprite/grass/seagrass-0.vox differ
diff --git a/assets/voxygen/voxel/sprite/grass/seagrass-1.vox b/assets/voxygen/voxel/sprite/grass/seagrass-1.vox
new file mode 100644
index 0000000000..85edc9407f
Binary files /dev/null and b/assets/voxygen/voxel/sprite/grass/seagrass-1.vox differ
diff --git a/assets/voxygen/voxel/sprite/grass/seagrass-2.vox b/assets/voxygen/voxel/sprite/grass/seagrass-2.vox
new file mode 100644
index 0000000000..f3de5aab35
Binary files /dev/null and b/assets/voxygen/voxel/sprite/grass/seagrass-2.vox differ
diff --git a/assets/voxygen/voxel/sprite/grass/seagrass-3.vox b/assets/voxygen/voxel/sprite/grass/seagrass-3.vox
new file mode 100644
index 0000000000..8a3fd9a415
Binary files /dev/null and b/assets/voxygen/voxel/sprite/grass/seagrass-3.vox differ
diff --git a/assets/voxygen/voxel/sprite/grass/seagrass-4.vox b/assets/voxygen/voxel/sprite/grass/seagrass-4.vox
new file mode 100644
index 0000000000..45b20df8ee
Binary files /dev/null and b/assets/voxygen/voxel/sprite/grass/seagrass-4.vox differ
diff --git a/assets/voxygen/voxel/sprite/seashells/shell-0.vox b/assets/voxygen/voxel/sprite/seashells/shell-0.vox
new file mode 100644
index 0000000000..40c7eb8628
Binary files /dev/null and b/assets/voxygen/voxel/sprite/seashells/shell-0.vox differ
diff --git a/assets/voxygen/voxel/sprite/seashells/shell-1.vox b/assets/voxygen/voxel/sprite/seashells/shell-1.vox
new file mode 100644
index 0000000000..3b1564e01e
Binary files /dev/null and b/assets/voxygen/voxel/sprite/seashells/shell-1.vox differ
diff --git a/assets/voxygen/voxel/sprite_manifest.ron b/assets/voxygen/voxel/sprite_manifest.ron
index 2de54b1163..c4aff9d909 100644
--- a/assets/voxygen/voxel/sprite_manifest.ron
+++ b/assets/voxygen/voxel/sprite_manifest.ron
@@ -2205,6 +2205,477 @@ ChestBurried: Some((
     ],
     wind_sway: 0.0,
 )),
+// Stony Coral
+StonyCoral: Some((
+    variations: [
+        (
+            model: "voxygen.voxel.sprite.coral.yellow_fire_coral-0",
+            offset: (-7.0, -6.5, -0.1),
+            lod_axes: (0.5, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.red_fire_coral-0",
+            offset: (-6.5, -2.0, -0.1),
+            lod_axes: (0.5, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.red_fire_coral-1",
+            offset: (-7.5, -4.5, -0.1),
+            lod_axes: (0.5, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.red_fire_coral-2",
+            offset: (-7.0, -4, -0.1),
+            lod_axes: (0.5, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.green_brain_coral-0",
+            offset: (-9.5, -10.5, -5.1),
+            lod_axes: (0.5, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.green_brain_coral-1",
+            offset: (-9.5, -10.5, -3.1),
+            lod_axes: (0.5, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.green_brain_coral-2",
+            offset: (-6.5, -6.5, -0.1),
+            lod_axes: (0.5, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.pink_brain_coral-0",
+            offset: (-10.0, -9.5, -5.1),
+            lod_axes: (0.5, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.pink_brain_coral-1",
+            offset: (-6.0, -5.5, -0.0),
+            lod_axes: (0.5, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.pink_birdsnest_coral-0",
+            offset: (-5.5, -5.5, -0.1),
+            lod_axes: (0.5, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.pink_birdsnest_coral-1",
+            offset: (-5.5, -5.5, -0.1),
+            lod_axes: (0.5, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.pink_birdsnest_coral-2",
+            offset: (-5.5, -5.5, -0.1),
+            lod_axes: (0.5, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.pink_birdsnest_coral-3",
+            offset: (-5.5, -5.5, -0.1),
+            lod_axes: (0.5, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.plating_acropora-0",
+            offset: (-9.5, -9.0, -0.1),
+            lod_axes: (0.5, 0.5, 0.0),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.plating_acropora-1",
+            offset: (-9.5, -9.0, -0.1),
+            lod_axes: (0.5, 0.5, 0.0),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.plating_acropora-2",
+            offset: (-11.0, -10.5, -0.1),
+            lod_axes: (0.5, 0.5, 0.0),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.plating_acropora-3",
+            offset: (-11.0, -11.0, -0.1),
+            lod_axes: (0.5, 0.5, 0.0),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.plating_acropora-4",
+            offset: (-9.0, -9.0, -0.1),
+            lod_axes: (0.5, 0.5, 0.0),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.plating_acropora-5",
+            offset: (-8.0, -9.0, -0.1),
+            lod_axes: (0.5, 0.5, 0.0),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.plating_acropora-6",
+            offset: (-9.0, -8.5, -0.1),
+            lod_axes: (0.5, 0.5, 0.0),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.plating_acropora-7",
+            offset: (-7, -9.0, -0.1),
+            lod_axes: (0.5, 0.5, 0.0),
+        ),
+    ],
+    wind_sway: 0.0,
+)),
+// Soft Coral
+SoftCoral: Some((
+    variations: [
+        (
+            model: "voxygen.voxel.sprite.coral.yellow_gorgonian-0",
+            offset: (-3.0, -10.0, 0.0),
+            lod_axes: (0.0, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.yellow_gorgonian-1",
+            offset: (-3.0, -13.0, 0.0),
+            lod_axes: (0.0, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.yellow_gorgonian-2",
+            offset: (-3.0, -17.5, 0.0),
+            lod_axes: (0.0, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.purp-0",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.purp-1",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.red_sea_fan-1",
+            offset: (-2.5, -15.5, 0.0),
+            lod_axes: (0.0, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.red_sea_fan-2",
+            offset: (-2.5, -22.5, 0.0),
+            lod_axes: (0.0, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.red_sea_fan-3",
+            offset: (-3.0, -15.5, 0.0),
+            lod_axes: (0.0, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.purple_finger_soft_coral-0",
+            offset: (-9.5, -8.5, -0.1),
+            lod_axes: (0.0, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.purple_finger_soft_coral-1",
+            offset: (-10.0, -19.5, -0.1),
+            lod_axes: (0.0, 0.5, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.green_ricordea-1",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.green_ricordea-2",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.green_ricordea-3",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.green_ricordea-4",
+            offset: (-6.5, -6.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.blue_ricordea-1",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.blue_ricordea-2",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.blue_ricordea-3",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.coral.sea_anemone-1",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+    ],
+    wind_sway: 1.0,
+)),
+// Sea Anemones
+SeaAnemone: Some((
+    variations: [
+        (
+            model: "voxygen.voxel.sprite.coral.sea_anemone-1",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+    ],
+    wind_sway: 1.0,
+)),
+//Bull kelp
+BullKelp: Some((
+    variations: [
+        (
+            model: "voxygen.voxel.sprite.algae.nereocystis_kelp-0",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.nereocystis_kelp-1",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.nereocystis_kelp-2",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.nereocystis_kelp-3",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.nereocystis_kelp-4",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.nereocystis_kelp-5",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.nereocystis_kelp-6",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.nereocystis_kelp-7",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.nereocystis_kelp-8",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+    ],
+    wind_sway: 0.5,
+)),
+//scattered temperate type Seaweed
+SeaweedTemperate: Some((
+    variations: [
+        (
+            model: "voxygen.voxel.sprite.algae.kelp_sprig-0",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.kelp_sprig-1",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.grass.grass_short_1",
+            offset: (-5.5, -6.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.grass.grass_short_2",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+    ],
+    wind_sway: 0.5,
+)),
+//scattered tropical type seaweed
+SeaweedTropical: Some((
+    variations: [
+        (
+            model: "voxygen.voxel.sprite.grass.grass_short_1",
+            offset: (-5.5, -6.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.grass.grass_short_2",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.acetabularia-0",
+            offset: (-5.5, -6.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.acetabularia-1",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.acetabularia-2",
+            offset: (-5.0, -6.0, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.udotea-0",
+            offset: (-8.0, -1.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.udotea-1",
+            offset: (-8.0, -1.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.udotea-2",
+            offset: (-10.0, -2.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+    ],
+    wind_sway: 0.7,
+)),
+//Mermaids fan algae patch
+MermaidsFan: Some((
+    variations: [
+        (
+            model: "voxygen.voxel.sprite.algae.udotea-0",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.udotea-1",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.udotea-2",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+    ],
+    wind_sway: 0.7,
+)),
+//Caulerpa prolifera patch
+WavyAlgae: Some((
+    variations: [
+        (
+            model: "voxygen.voxel.sprite.algae.caulerpa_prolifera-0",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.caulerpa_prolifera-1",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.caulerpa_prolifera-2",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.caulerpa_prolifera-3",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+    ],
+    wind_sway: 0.7,
+)),
+//Caulerpa lentillifera patch
+SeaGrapes: Some((
+    variations: [
+        (
+            model: "voxygen.voxel.sprite.algae.caulerpa_lentillifera-0",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.caulerpa_lentillifera-1",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.caulerpa_lentillifera-2",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.caulerpa_lentillifera-3",
+            offset: (-5.5, -5.5, 0.0),
+            lod_axes: (0.0, 0.0, 0.5),
+        ),
+    ],
+    wind_sway: 0.7,
+)),
+//Giant Kelp
+GiantKelp: Some((
+    variations: [
+        (
+            model: "voxygen.voxel.sprite.algae.macrocystis_kelp-0",
+            offset: (-15.5, -15.5, 0.0),
+            lod_axes: (0.5, 0.5, 0.0),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.macrocystis_kelp-1",
+            offset: (-15.5, -15.5, 0.0),
+            lod_axes: (0.5, 0.5, 0.0),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.macrocystis_kelp-2",
+            offset: (-15.5, -15.5, 0.0),
+            lod_axes: (0.5, 0.5, 0.0),
+        ),
+        (
+            model: "voxygen.voxel.sprite.algae.macrocystis_kelp-3",
+            offset: (-15.5, -15.5, 0.0),
+            lod_axes: (0.5, 0.5, 0.0),
+        ),
+    ],
+    wind_sway: 0.2,
+)),
+//Seagrass
+Seagrass: Some((
+    variations: [
+        (
+            model: "voxygen.voxel.sprite.grass.seagrass-0",
+            offset: (-6.0, -6.0, -0.0),
+            lod_axes: (1.0, 1.0, 1.0),
+        ),
+        (
+            model: "voxygen.voxel.sprite.grass.seagrass-1",
+            offset: (-6.0, -6.0, -0.0),
+            lod_axes: (1.0, 1.0, 1.0),
+        ),
+        (
+            model: "voxygen.voxel.sprite.grass.seagrass-2",
+            offset: (-6.0, -6.0, -0.0),
+            lod_axes: (1.0, 1.0, 1.0),
+        ),
+        (
+            model: "voxygen.voxel.sprite.grass.seagrass-3",
+            offset: (-6.0, -6.0, -0.0),
+            lod_axes: (1.0, 1.0, 1.0),
+        ),
+		(
+            model: "voxygen.voxel.sprite.grass.seagrass-4",
+            offset: (-6.0, -6.0, -0.0),
+            lod_axes: (1.0, 1.0, 1.0),
+    )
+],
+wind_sway: 0.7,
+)),
 // Underwater Mud Piles
 Mud: Some((
     variations: [
diff --git a/common/src/comp/inventory/item/mod.rs b/common/src/comp/inventory/item/mod.rs
index 2a5b6399a8..d7272e3050 100644
--- a/common/src/comp/inventory/item/mod.rs
+++ b/common/src/comp/inventory/item/mod.rs
@@ -629,6 +629,7 @@ impl Item {
             SpriteKind::RubySmall => "common.items.crafting_ing.ruby",
             SpriteKind::EmeraldSmall => "common.items.crafting_ing.emerald",
             SpriteKind::SapphireSmall => "common.items.crafting_ing.sapphire",
+            SpriteKind::Seashells => "common.items.crafting_ing.seashells",
             _ => return None,
         }))
     }
diff --git a/common/src/terrain/sprite.rs b/common/src/terrain/sprite.rs
index 8756584c33..de7e8fd6ff 100644
--- a/common/src/terrain/sprite.rs
+++ b/common/src/terrain/sprite.rs
@@ -128,6 +128,20 @@ make_case_elim!(
         SapphireSmall = 0x65,
         WallLampSmall = 0x66,
         WallSconce = 0x67,
+        StonyCoral = 0x68,
+        SoftCoral = 0x69,
+        SeaweedTemperate = 0x6A,
+        SeaweedTropical = 0x6B,
+        GiantKelp = 0x6C,
+        BullKelp = 0x6D,
+        WavyAlgae = 0x6E,
+        SeaGrapes = 0x6F,
+        MermaidsFan = 0x70,
+        SeaAnemone = 0x71,
+        Seashells = 0x72,
+        Seagrass = 0x73,
+        RedAlgae = 0x74,
+        UnderwaterVent = 0x75,
     }
 );
 
@@ -168,6 +182,7 @@ impl SpriteKind {
             SpriteKind::Pot => 0.90,
             SpriteKind::Mud => 0.36,
             SpriteKind::ChestBurried => 0.91,
+            SpriteKind::StonyCoral => 1.4,
             // TODO: Find suitable heights.
             SpriteKind::BarrelCactus
             | SpriteKind::RoundCactus
@@ -230,6 +245,7 @@ impl SpriteKind {
             SpriteKind::RubySmall => true,
             SpriteKind::EmeraldSmall => true,
             SpriteKind::SapphireSmall => true,
+            SpriteKind::Seashells => true,
             _ => false,
         }
     }
diff --git a/world/src/layer/scatter.rs b/world/src/layer/scatter.rs
index db6ab439fe..be82bd5d90 100644
--- a/world/src/layer/scatter.rs
+++ b/world/src/layer/scatter.rs
@@ -304,6 +304,221 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
                 Some((100.0, 0.15)),
             )
         }),
+        // seagrass
+        (Seagrass, true, |c, col| {
+            (
+                close(c.temp, CONFIG.temperate_temp, 0.8)
+                    * MUSH_FACT
+                    * 300.0
+                    * if col.water_level < CONFIG.sea_level
+                        && col.alt < col.water_level - DEPTH_WATER_NORM + 18.0
+                    {
+                        1.0
+                    } else {
+                        0.0
+                    },
+                Some((150.0, 0.3)),
+            )
+        }),
+        // seagrass, coastal patches
+        (Seagrass, true, |_, col| {
+            (
+                MUSH_FACT
+                    * 300.0
+                    * if col.water_level < CONFIG.sea_level && (col.water_level - col.alt) < 3.0 {
+                        1.0
+                    } else {
+                        0.0
+                    },
+                Some((90.0, 0.4)),
+            )
+        }),
+        // scattered seaweed (temperate species)
+        (SeaweedTemperate, true, |c, col| {
+            (
+                close(c.temp, CONFIG.temperate_temp, 0.8)
+                    * MUSH_FACT
+                    * 50.0
+                    * if col.water_level < CONFIG.sea_level
+                        && col.alt < col.water_level - DEPTH_WATER_NORM + 11.0
+                    {
+                        1.0
+                    } else {
+                        0.0
+                    },
+                Some((500.0, 0.75)),
+            )
+        }),
+        // scattered seaweed (tropical species)
+        (SeaweedTropical, true, |c, col| {
+            (
+                close(c.temp, 1.0, 0.95)
+                    * MUSH_FACT
+                    * 50.0
+                    * if col.water_level < CONFIG.sea_level
+                        && col.alt < col.water_level - DEPTH_WATER_NORM + 11.0
+                    {
+                        1.0
+                    } else {
+                        0.0
+                    },
+                Some((500.0, 0.75)),
+            )
+        }),
+        // Caulerpa lentillifera algae patch
+        (SeaGrapes, true, |_, col| {
+            (
+                MUSH_FACT
+                    * 250.0
+                    * if col.water_level < CONFIG.sea_level
+                        && col.alt < col.water_level - DEPTH_WATER_NORM + 10.0
+                    {
+                        1.0
+                    } else {
+                        0.0
+                    },
+                Some((100.0, 0.15)),
+            )
+        }),
+        // Caulerpa prolifera algae patch
+        (WavyAlgae, true, |_, col| {
+            (
+                MUSH_FACT
+                    * 250.0
+                    * if col.water_level < CONFIG.sea_level
+                        && col.alt < col.water_level - DEPTH_WATER_NORM + 10.0
+                    {
+                        1.0
+                    } else {
+                        0.0
+                    },
+                Some((100.0, 0.15)),
+            )
+        }),
+        // Mermaids' fan algae patch
+        (MermaidsFan, true, |c, col| {
+            (
+                close(c.temp, 1.0, 0.95)
+                    * MUSH_FACT
+                    * 500.0
+                    * if col.water_level < CONFIG.sea_level
+                        && col.alt < col.water_level - DEPTH_WATER_NORM + 10.0
+                    {
+                        1.0
+                    } else {
+                        0.0
+                    },
+                Some((50.0, 0.10)),
+            )
+        }),
+        // Sea anemones
+        (SeaAnemone, true, |c, col| {
+            (
+                close(c.temp, CONFIG.temperate_temp, 0.8)
+                    * MUSH_FACT
+                    * 125.0
+                    * if col.water_level < CONFIG.sea_level
+                        && col.alt < col.water_level - DEPTH_WATER_NORM - 9.0
+                    {
+                        1.0
+                    } else {
+                        0.0
+                    },
+                Some((100.0, 0.3)),
+            )
+        }),
+        // Giant Kelp
+        (GiantKelp, true, |c, col| {
+            (
+                close(c.temp, CONFIG.temperate_temp, 0.8)
+                    * MUSH_FACT
+                    * 220.0
+                    * if col.water_level < CONFIG.sea_level
+                        && col.alt < col.water_level - DEPTH_WATER_NORM - 9.0
+                    {
+                        1.0
+                    } else {
+                        0.0
+                    },
+                Some((200.0, 0.4)),
+            )
+        }),
+        // Bull Kelp
+        (BullKelp, true, |c, col| {
+            (
+                close(c.temp, CONFIG.temperate_temp, 0.7)
+                    * MUSH_FACT
+                    * 300.0
+                    * if col.water_level < CONFIG.sea_level
+                        && col.alt < col.water_level - DEPTH_WATER_NORM + 3.0
+                    {
+                        1.0
+                    } else {
+                        0.0
+                    },
+                Some((75.0, 0.3)),
+            )
+        }),
+        // Stony Corals
+        (StonyCoral, true, |c, col| {
+            (
+                close(c.temp, 1.0, 0.9)
+                    * MUSH_FACT
+                    * 160.0
+                    * if col.water_level < CONFIG.sea_level
+                        && col.alt < col.water_level - DEPTH_WATER_NORM + 10.0
+                    {
+                        1.0
+                    } else {
+                        0.0
+                    },
+                Some((120.0, 0.4)),
+            )
+        }),
+        // Soft Corals
+        (SoftCoral, true, |c, col| {
+            (
+                close(c.temp, 1.0, 0.9)
+                    * MUSH_FACT
+                    * 120.0
+                    * if col.water_level < CONFIG.sea_level
+                        && col.alt < col.water_level - DEPTH_WATER_NORM + 10.0
+                    {
+                        1.0
+                    } else {
+                        0.0
+                    },
+                Some((120.0, 0.4)),
+            )
+        }),
+        // Seashells
+        (Seashells, true, |c, col| {
+            (
+                (c.rockiness - 0.5).max(0.0)
+                    * 1.0e-3
+                    * if col.water_level < CONFIG.sea_level
+                        && col.alt < col.water_level - DEPTH_WATER_NORM + 20.0
+                    {
+                        1.0
+                    } else {
+                        0.0
+                    },
+                None,
+            )
+        }),
+        // hydrothermal vent
+        //        (UnderwaterVent, true, |_, col| {
+        //            (
+        //                MUSH_FACT
+        //                    * 250.0
+        //                    * * if col.water_level < CONFIG.sea_level && col.alt <
+        //                      col.water_level - DEPTH_WATER_NORM - 50.0 { 1.0
+        //                    } else {
+        //                        0.0
+        //                    },
+        //                Some((100.0, 0.15)),
+        //            )
+        //        }),
         (Stones, true, |c, col| {
             (
                 (c.rockiness - 0.5).max(0.0)