diff --git a/assets/voxygen/voxel/sprite/flowers/jungle_flower_red-0.vox b/assets/voxygen/voxel/sprite/flowers/jungle_flower_red-0.vox new file mode 100644 index 0000000000..e6d3ef992b --- /dev/null +++ b/assets/voxygen/voxel/sprite/flowers/jungle_flower_red-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:651c431d9120364a50a9a0cce9d3920174f72ed9694f863e5970ebb1957f30ed +size 2660 diff --git a/assets/voxygen/voxel/sprite/flowers/jungle_flower_red-1.vox b/assets/voxygen/voxel/sprite/flowers/jungle_flower_red-1.vox new file mode 100644 index 0000000000..c35c0b2659 --- /dev/null +++ b/assets/voxygen/voxel/sprite/flowers/jungle_flower_red-1.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d06d70fbf621ab36c7568a366fef1c5fb6a73e7576235dd085e108dc46eeebfa +size 2224 diff --git a/assets/voxygen/voxel/sprite/junglefern/1.vox b/assets/voxygen/voxel/sprite/junglefern/1.vox new file mode 100644 index 0000000000..bedc33e2e3 --- /dev/null +++ b/assets/voxygen/voxel/sprite/junglefern/1.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fa250884f2611ea2114d4d0058879c715f24a2c8cd9cf6fa2b5d9785b02d23a +size 3172 diff --git a/assets/voxygen/voxel/sprite/junglefern/2.vox b/assets/voxygen/voxel/sprite/junglefern/2.vox new file mode 100644 index 0000000000..b747a1d59a --- /dev/null +++ b/assets/voxygen/voxel/sprite/junglefern/2.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0996b27f32eb4f801620617600c15b99c64105b97d1814ccb4adbf960d41b98d +size 1572 diff --git a/assets/voxygen/voxel/sprite/junglefern/3.vox b/assets/voxygen/voxel/sprite/junglefern/3.vox new file mode 100644 index 0000000000..91d59f0e79 --- /dev/null +++ b/assets/voxygen/voxel/sprite/junglefern/3.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ca544785f2203695f52020a5166764c32b6f86793a012313b1a23894065d4d6 +size 2040 diff --git a/assets/voxygen/voxel/sprite/junglefern/4.vox b/assets/voxygen/voxel/sprite/junglefern/4.vox new file mode 100644 index 0000000000..76b531be0d --- /dev/null +++ b/assets/voxygen/voxel/sprite/junglefern/4.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88f5127a827df367cd3bc17dee1a92aa77f194183418f4ac1f55a6f9223d1ba4 +size 1708 diff --git a/assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-0.vox b/assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-0.vox new file mode 100644 index 0000000000..b94e7da17d --- /dev/null +++ b/assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e6e57d527cc1ed1425f4ff50a8f294f5241afc9801c158ea6ecc20b2382c0b8 +size 1544 diff --git a/assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-1.vox b/assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-1.vox new file mode 100644 index 0000000000..41d8380331 --- /dev/null +++ b/assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-1.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea475ea6f0dc4814732f6caa7059715fedcd7042c41ddc322e626ea0af16906e +size 2212 diff --git a/assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-2.vox b/assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-2.vox new file mode 100644 index 0000000000..32069d697d --- /dev/null +++ b/assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-2.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eaf9bc76440f8690565c95f7d7e6e41f2a3bac71dde15c9ae8a05cee5de455a0 +size 1560 diff --git a/assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-3.vox b/assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-3.vox new file mode 100644 index 0000000000..4afb7cd584 --- /dev/null +++ b/assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-3.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0e227fe8791ea2c07f40154852e16517c3fb30f20cfb2cac47f81f766fcbcc0 +size 2304 diff --git a/assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-4.vox b/assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-4.vox new file mode 100644 index 0000000000..19ea424730 --- /dev/null +++ b/assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-4.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:103a7fbd4e9eaadc057f8e81f47205e9a61ef55b2164a3302efcdde5660bd4e9 +size 2016 diff --git a/assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-5.vox b/assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-5.vox new file mode 100644 index 0000000000..c0cc5155b0 --- /dev/null +++ b/assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-5.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41144723880c38825244c30948b5ccfde3dff22419b23d68961d204cb69c806e +size 2072 diff --git a/assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-0.vox b/assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-0.vox new file mode 100644 index 0000000000..eb4d882270 --- /dev/null +++ b/assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9567bd293b468a54c98b02c0eacee5022d82c73db8eb4c32c436e04a30adc3d +size 1336 diff --git a/assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-1.vox b/assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-1.vox new file mode 100644 index 0000000000..76d9f71414 --- /dev/null +++ b/assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-1.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b24457ee129b2365704e8653eaa07f8e0a43c1d22134f2697e70b4b3b5f4bc5e +size 1472 diff --git a/assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-2.vox b/assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-2.vox new file mode 100644 index 0000000000..496fd22ebd --- /dev/null +++ b/assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-2.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ff768249835bc0f0250916337f6a986b7009ceb48361a291fa210a9de01a9d7 +size 1460 diff --git a/assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-3.vox b/assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-3.vox new file mode 100644 index 0000000000..fba5d65ea1 --- /dev/null +++ b/assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-3.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c06309ecf7c4d84050082e2eb012311607772d9e28ca7504013a4f7065a96b2d +size 1540 diff --git a/assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-4.vox b/assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-4.vox new file mode 100644 index 0000000000..305d771d2b --- /dev/null +++ b/assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-4.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf4b1c3255516c194f220c76f80f08e4d1896c14bda3a2bb5263815ee08e3a87 +size 1752 diff --git a/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-1.vox b/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-1.vox new file mode 100644 index 0000000000..bda34f200c --- /dev/null +++ b/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-1.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5adad6323edd520559c65b33d180bf61ef0626b9b827983037da5cc92b1e6bd1 +size 1428 diff --git a/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-2.vox b/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-2.vox new file mode 100644 index 0000000000..7d4dda1eaa --- /dev/null +++ b/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-2.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8a68b4f1814a2f21a7fb96ec7776a30419e6f5d46ddbc31bb59fb1169d401cb +size 1428 diff --git a/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-3.vox b/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-3.vox new file mode 100644 index 0000000000..772cbbe74b --- /dev/null +++ b/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-3.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c6f4b5374d0d6207d7fd3fe0f63b4c25aa01884bb7ed876d4865684791aa9c0 +size 1452 diff --git a/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-4.vox b/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-4.vox new file mode 100644 index 0000000000..37ae3ecc79 --- /dev/null +++ b/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-4.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89ec967111c4fa94b6e6c99223f877ff77a69ff35f7e0f5fe464cd286d323564 +size 1472 diff --git a/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-5.vox b/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-5.vox new file mode 100644 index 0000000000..951c4ef891 --- /dev/null +++ b/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-5.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9fb7016ec453370632bebe29bd3f3ce17615ffef15675376205a547af8f78b4 +size 1472 diff --git a/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-6.vox b/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-6.vox new file mode 100644 index 0000000000..06401cdb4a --- /dev/null +++ b/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-6.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b2244ed2438aa0aa22c3aeafe5b483504860d7cc01f5b4d2baa6061e21c2365 +size 1560 diff --git a/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-7.vox b/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-7.vox new file mode 100644 index 0000000000..27f41620a7 --- /dev/null +++ b/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-7.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b8154cc877fb216a7a9d75a90ea4b79520b7f81afd48d72d93baedba524cbd3 +size 1560 diff --git a/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-8.vox b/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-8.vox new file mode 100644 index 0000000000..1810d63ea4 --- /dev/null +++ b/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-8.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6ea8fe4fbdab8a07f9cf085af61b39353fe46b8056c77902389950909d395bd +size 1480 diff --git a/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-9.vox b/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-9.vox new file mode 100644 index 0000000000..15ec014769 --- /dev/null +++ b/assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-9.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a24495db14af3800f717011f36f141b8d720fb510fb44d5bfcdd76e77dacd27a +size 1480 diff --git a/assets/voxygen/voxel/sprite/lillypads/temperate-reeds-1.vox b/assets/voxygen/voxel/sprite/lillypads/temperate-reeds-1.vox new file mode 100644 index 0000000000..1f48e8b0ed --- /dev/null +++ b/assets/voxygen/voxel/sprite/lillypads/temperate-reeds-1.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ab734220939a43c468d2017e6b5d14d40c66d091d020260ea227d1ba664dd4b +size 1580 diff --git a/assets/voxygen/voxel/sprite/lillypads/temperate-reeds-2.vox b/assets/voxygen/voxel/sprite/lillypads/temperate-reeds-2.vox new file mode 100644 index 0000000000..aff382b018 --- /dev/null +++ b/assets/voxygen/voxel/sprite/lillypads/temperate-reeds-2.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d07fcadaf9931c6b257f2a3f9c518e494733a74ff4ef87d3089c68ce2c6d68fb +size 1596 diff --git a/assets/voxygen/voxel/sprite/lillypads/temperate-reeds-3.vox b/assets/voxygen/voxel/sprite/lillypads/temperate-reeds-3.vox new file mode 100644 index 0000000000..0787886d89 --- /dev/null +++ b/assets/voxygen/voxel/sprite/lillypads/temperate-reeds-3.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ca30a6226d3e8fd31da1b722b4d797d034f849e7dad9fa4d4b657ea0b6ad445 +size 1468 diff --git a/assets/voxygen/voxel/sprite/lillypads/temperate-reeds-4.vox b/assets/voxygen/voxel/sprite/lillypads/temperate-reeds-4.vox new file mode 100644 index 0000000000..cc4e3f2d5f --- /dev/null +++ b/assets/voxygen/voxel/sprite/lillypads/temperate-reeds-4.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c47a6a059955a4f881ea218c01d8025ccfb159681ec886e40154cbdeb08f29c4 +size 1720 diff --git a/assets/voxygen/voxel/sprite/lillypads/temperate-reeds-5.vox b/assets/voxygen/voxel/sprite/lillypads/temperate-reeds-5.vox new file mode 100644 index 0000000000..afd4cb94ea --- /dev/null +++ b/assets/voxygen/voxel/sprite/lillypads/temperate-reeds-5.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1118bbddff4aff352db8013e5418598fa3d5e5ae5813ef3cd2f9c3ac8a3aaea +size 1676 diff --git a/assets/voxygen/voxel/sprite/reed/reed-0.vox b/assets/voxygen/voxel/sprite/reed/reed-0.vox index 66808b22ff..05988dcb6e 100644 --- a/assets/voxygen/voxel/sprite/reed/reed-0.vox +++ b/assets/voxygen/voxel/sprite/reed/reed-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a2539edce18e496ee022b48fd7ae006a88a000085fe47d8725d14ff72807b26 -size 1456 +oid sha256:10628fc94edc0171fa6d85f4264026d994b7b0302d077bd68100036cd6dc8c6f +size 1508 diff --git a/assets/voxygen/voxel/sprite/reed/reed-1.vox b/assets/voxygen/voxel/sprite/reed/reed-1.vox index d5772761b4..6b8f6856e0 100644 --- a/assets/voxygen/voxel/sprite/reed/reed-1.vox +++ b/assets/voxygen/voxel/sprite/reed/reed-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a057889e4388350c3a740ead684ee1cdbdb7613d38c34a2c3508347f976a9a66 -size 1376 +oid sha256:1e2fa2d4df279ee130c10d3be4b5518ea8d1bd1aa435325bcedfde3d4ee512ee +size 1432 diff --git a/assets/voxygen/voxel/sprite/reed/reed-2.vox b/assets/voxygen/voxel/sprite/reed/reed-2.vox index d796c519c1..d91058ef34 100644 --- a/assets/voxygen/voxel/sprite/reed/reed-2.vox +++ b/assets/voxygen/voxel/sprite/reed/reed-2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5053d2208c25b3e350be330e428f03a4044af7ca6a6d0e14a6631fd7fee206ce -size 1512 +oid sha256:844709d06bd61854af3cb5e5321df2017fd70c5c18e050221ee509a8571da34d +size 1516 diff --git a/assets/voxygen/voxel/sprite/reed/reed-3.vox b/assets/voxygen/voxel/sprite/reed/reed-3.vox index 8fe3592b6d..55a985d52b 100644 --- a/assets/voxygen/voxel/sprite/reed/reed-3.vox +++ b/assets/voxygen/voxel/sprite/reed/reed-3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f550f8025f5bd2640bece71fe591d9e86d4000a864673c4a7b1813879c4d9a4c -size 1456 +oid sha256:34661f4c88d67bcf9a6ba51ef952713198a216f527ac86f1a920da7cd6e4f3d4 +size 1516 diff --git a/assets/voxygen/voxel/sprite/reed/reed-4.vox b/assets/voxygen/voxel/sprite/reed/reed-4.vox index d55468ae62..2e136605f3 100644 --- a/assets/voxygen/voxel/sprite/reed/reed-4.vox +++ b/assets/voxygen/voxel/sprite/reed/reed-4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:edd9796cafd53ca57cc5afdfedf4d3d30d3a4697057b37491080fed64d8cae9a -size 1644 +oid sha256:cd12300402fcbd987761627d0251dde0df0e79a53c89f3fc2f4797ad4f7f8f08 +size 1700 diff --git a/assets/voxygen/voxel/sprite_manifest.ron b/assets/voxygen/voxel/sprite_manifest.ron index 68ba9e835b..e2831a62f4 100644 --- a/assets/voxygen/voxel/sprite_manifest.ron +++ b/assets/voxygen/voxel/sprite_manifest.ron @@ -260,6 +260,16 @@ RedFlower: Some(( offset: (-3.5, -3.5, 0.0), lod_axes: (1.0, 1.0, 1.0), ), + ( + model: "voxygen.voxel.sprite.flowers.jungle_flower_red-0", + offset: (-7.5, -7.5, 0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.flowers.jungle_flower_red-1", + offset: (-7.5, -7.5, 0.0), + lod_axes: (1.0, 1.0, 1.0), + ), ], wind_sway: 0.1, )), @@ -444,6 +454,41 @@ LargeGrass: Some(( ], wind_sway: 0.5, )), +JungleRedGrass: Some(( + variations: [ + ( + model: "voxygen.voxel.sprite.jungleredgrass.jungle_grass_red-0", + offset: (-5.5, -5.5, 0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.jungleredgrass.jungle_grass_red-1", + offset: (-5.5, -5.5, 0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.jungleredgrass.jungle_grass_red-2", + offset: (-5.5, -5.5, 0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.jungleredgrass.jungle_grass_red-3", + offset: (-5.5, -5.5, 0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.jungleredgrass.jungle_grass_red-4", + offset: (-5.5, -5.5, 0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.jungleredgrass.jungle_grass_red-5", + offset: (-5.5, -5.5, 0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ], + wind_sway: 0.1, +)), // Fruit Apple: Some(( variations: [ @@ -946,6 +991,36 @@ LeafyPlant: Some(( ], wind_sway: 0.4, )), +JungleLeafyPlant: Some(( + variations: [ + ( + model: "voxygen.voxel.sprite.leafy_plant.jungle_plant-0", + offset: (-5.5, -1.5, -0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.leafy_plant.jungle_plant-1", + offset: (-6.5, -2.5, -0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.leafy_plant.jungle_plant-2", + offset: (-6.5, -2.5, -0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.leafy_plant.jungle_plant-3", + offset: (-7.5, -2.5, -0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.leafy_plant.jungle_plant-4", + offset: (-7.5, -5.5, -0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ], + wind_sway: 0.4, +)), // Ferns Fern: Some(( variations: [ @@ -1017,6 +1092,31 @@ Fern: Some(( ], wind_sway: 0.4, )), +JungleFern: Some(( + variations: [ + ( + model: "voxygen.voxel.sprite.junglefern.1", + offset: (-9.5, -9.5, -0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.junglefern.2", + offset: (-7.5, -3.5, -0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.junglefern.3", + offset: (-8.0, -8.0, -0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.junglefern.4", + offset: (-6.0, -6.0, -0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ], + wind_sway: 0.4, +)), // Savanna Flora SavannaGrass: Some(( variations: [ @@ -2222,6 +2322,31 @@ Reed: Some(( offset: (-5.5, -5.5, 0.0), lod_axes: (0.0, 0.0, 0.5), ), + ( + model: "voxygen.voxel.sprite.lillypads.temperate-reeds-1", + offset: (-4.5, -4.0, 0.0), + lod_axes: (0.0, 0.0, 0.5), + ), + ( + model: "voxygen.voxel.sprite.lillypads.temperate-reeds-2", + offset: (-4.5, -4.5, 0.0), + lod_axes: (0.0, 0.0, 0.5), + ), + ( + model: "voxygen.voxel.sprite.lillypads.temperate-reeds-3", + offset: (-4.5, -4.0, 0.0), + lod_axes: (0.0, 0.0, 0.5), + ), + ( + model: "voxygen.voxel.sprite.lillypads.temperate-reeds-4", + offset: (-4.5, -4.5, 0.0), + lod_axes: (0.0, 0.0, 0.5), + ), + ( + model: "voxygen.voxel.sprite.lillypads.temperate-reeds-5", + offset: (-4.0, -4.5, 0.0), + lod_axes: (0.0, 0.0, 0.5), + ), ], wind_sway: 0.3, )), @@ -3482,4 +3607,55 @@ CavernMycelBlue: Some(( ], wind_sway: 0.1, )), +// LillyPads on rivers +LillyPads: Some(( + variations: [ + ( + model: "voxygen.voxel.sprite.lillypads.temperate-lilypad-1", + offset: (-4.5, -4.5, -18.0), + lod_axes: (0.0, 0.0, 0.0), + ), + ( + model: "voxygen.voxel.sprite.lillypads.temperate-lilypad-2", + offset: (-4.5, -4.5, -18.0), + lod_axes: (0.0, 0.0, 0.0), + ), + ( + model: "voxygen.voxel.sprite.lillypads.temperate-lilypad-3", + offset: (-5.5, -5.0, -18.0), + lod_axes: (0.0, 0.0, 0.0), + ), + ( + model: "voxygen.voxel.sprite.lillypads.temperate-lilypad-4", + offset: (-5.5, -5.5, -18.0), + lod_axes: (0.0, 0.0, 0.0), + ), + ( + model: "voxygen.voxel.sprite.lillypads.temperate-lilypad-5", + offset: (-5.5, -5.5, -18.0), + lod_axes: (0.0, 0.0, 0.0), + ), + ( + model: "voxygen.voxel.sprite.lillypads.temperate-lilypad-6", + offset: (-5.5, -5.5, -18.0), + lod_axes: (0.0, 0.0, 0.0), + ), + ( + model: "voxygen.voxel.sprite.lillypads.temperate-lilypad-7", + offset: (-5.5, -5.5, -18.0), + lod_axes: (0.0, 0.0, 0.0), + ), + ( + model: "voxygen.voxel.sprite.lillypads.temperate-lilypad-8", + offset: (-4.5, -4.5, -18.0), + lod_axes: (0.0, 0.0, 0.0), + ), + ( + model: "voxygen.voxel.sprite.lillypads.temperate-lilypad-9", + offset: (-4.5, -4.5, -18.0), + lod_axes: (0.0, 0.0, 0.0), + ), + ], + wind_sway: 0.6, +)), ) diff --git a/common/src/terrain/sprite.rs b/common/src/terrain/sprite.rs index a8acf2c2a5..55f36b0a5e 100644 --- a/common/src/terrain/sprite.rs +++ b/common/src/terrain/sprite.rs @@ -183,6 +183,10 @@ make_case_elim!( CavernLillypadBlue = 0x9C, CavernMycelBlue = 0x9D, DismantlingBench = 0x9E, + JungleFern = 0x9F, + LillyPads = 0xA0, + JungleLeafyPlant = 0xA1, + JungleRedGrass = 0xA2, } ); @@ -271,6 +275,7 @@ impl SpriteKind { | SpriteKind::Silver | SpriteKind::Gold => 0.6, SpriteKind::EnsnaringVines | SpriteKind::CavernLillypadBlue => 0.1, + SpriteKind::LillyPads => 0.1, _ => return None, }) } diff --git a/world/src/layer/scatter.rs b/world/src/layer/scatter.rs index 01fef8e36a..e346c53a39 100644 --- a/world/src/layer/scatter.rs +++ b/world/src/layer/scatter.rs @@ -1,5 +1,5 @@ use crate::{column::ColumnSample, sim::SimChunk, Canvas, CONFIG}; -use common::terrain::SpriteKind; +use common::terrain::{Block, SpriteKind}; use noise::NoiseFn; use rand::prelude::*; use std::f32; @@ -13,17 +13,24 @@ const MUSH_FACT: f32 = 1.0e-4; // To balance things around the mushroom spawning const GRASS_FACT: f32 = 1.0e-3; // To balance things around the grass spawning rate const DEPTH_WATER_NORM: f32 = 15.0; // Water depth at which regular underwater sprites start spawning pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { + enum WaterMode { + Underwater, + Floating, + Ground, + } + use WaterMode::*; + use SpriteKind::*; #[allow(clippy::type_complexity)] // TODO: Add back all sprites we had before let scatter: &[( _, - bool, + WaterMode, fn(&SimChunk, &ColumnSample) -> (f32, Option<(f32, f32, f32)>), )] = &[ // (density, Option<(base_density_proportion, wavelen, threshold)>) // Flowers - (BlueFlower, false, |_, col| { + (BlueFlower, Ground, |_, col| { ( close(col.temp, CONFIG.temperate_temp, 0.7).min(close( col.humidity, @@ -35,7 +42,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { Some((0.0, 256.0, 0.25)), ) }), - (PinkFlower, false, |_, col| { + (PinkFlower, Ground, |_, col| { ( close(col.temp, 0.0, 0.7).min(close(col.humidity, CONFIG.jungle_hum, 0.4)) * col.tree_density @@ -44,7 +51,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { Some((0.0, 100.0, 0.1)), ) }), - (PurpleFlower, false, |_, col| { + (PurpleFlower, Ground, |_, col| { ( close(col.temp, CONFIG.temperate_temp, 0.7).min(close( col.humidity, @@ -56,7 +63,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { Some((0.0, 100.0, 0.1)), ) }), - (RedFlower, false, |_, col| { + (RedFlower, Ground, |_, col| { ( close(col.temp, CONFIG.tropical_temp, 0.7).min(close( col.humidity, @@ -68,7 +75,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { Some((0.0, 100.0, 0.1)), ) }), - (WhiteFlower, false, |_, col| { + (WhiteFlower, Ground, |_, col| { ( close(col.temp, 0.0, 0.7).min(close(col.humidity, CONFIG.jungle_hum, 0.4)) * col.tree_density @@ -77,7 +84,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { Some((0.0, 100.0, 0.1)), ) }), - (YellowFlower, false, |_, col| { + (YellowFlower, Ground, |_, col| { ( close(col.temp, 0.0, 0.7).min(close(col.humidity, CONFIG.jungle_hum, 0.4)) * col.tree_density @@ -86,7 +93,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { Some((0.0, 100.0, 0.1)), ) }), - (Cotton, false, |_, col| { + (Cotton, Ground, |_, col| { ( close(col.temp, CONFIG.temperate_temp, 0.7).min(close( col.humidity, @@ -98,7 +105,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { Some((0.0, 256.0, 0.25)), ) }), - (Sunflower, false, |_, col| { + (Sunflower, Ground, |_, col| { ( close(col.temp, 0.0, 0.7).min(close(col.humidity, CONFIG.jungle_hum, 0.4)) * col.tree_density @@ -107,7 +114,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { Some((0.0, 100.0, 0.15)), ) }), - (WildFlax, false, |_, col| { + (WildFlax, Ground, |_, col| { ( close(col.temp, 0.0, 0.7).min(close(col.humidity, CONFIG.jungle_hum, 0.4)) * col.tree_density @@ -117,7 +124,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // Herbs and Spices - (LingonBerry, false, |_, col| { + (LingonBerry, Ground, |_, col| { ( close(col.temp, 0.3, 0.4).min(close(col.humidity, CONFIG.jungle_hum, 0.5)) * MUSH_FACT @@ -125,7 +132,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { None, ) }), - (LeafyPlant, false, |_, col| { + (LeafyPlant, Ground, |_, col| { ( close(col.temp, 0.3, 0.4).min(close(col.humidity, CONFIG.jungle_hum, 0.3)) * GRASS_FACT @@ -133,7 +140,15 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { None, ) }), - (Fern, false, |_, col| { + (JungleLeafyPlant, Ground, |_, col| { + ( + close(col.temp, 0.3, 0.4).min(close(col.humidity, CONFIG.jungle_hum, 0.4)) + * GRASS_FACT + * 32.0, + Some((0.15, 64.0, 0.2)), + ) + }), + (Fern, Ground, |_, col| { ( close(col.temp, 0.3, 0.4).min(close(col.humidity, CONFIG.forest_hum, 0.5)) * GRASS_FACT @@ -141,7 +156,16 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { Some((0.0, 64.0, 0.2)), ) }), - (Blueberry, false, |_, col| { + (JungleFern, Ground, |_, col| { + ( + close(col.temp, 0.3, 0.4).min(close(col.humidity, CONFIG.jungle_hum, 0.4)) + * col.tree_density + * MUSH_FACT + * 200.0, + Some((0.0, 84.0, 0.35)), + ) + }), + (Blueberry, Ground, |_, col| { ( close(col.temp, CONFIG.temperate_temp, 0.5).min(close( col.humidity, @@ -152,7 +176,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { None, ) }), - (Pumpkin, false, |_, col| { + (Pumpkin, Ground, |_, col| { ( close(col.temp, CONFIG.temperate_temp, 0.5).min(close( col.humidity, @@ -165,23 +189,23 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { }), // Collectable Objects // Only spawn twigs in temperate forests - (Twigs, false, |_, col| { + (Twigs, Ground, |_, col| { ( (col.tree_density * 1.25 - 0.25).powf(0.5).max(0.0) * 0.75e-3, None, ) }), - (Stones, false, |chunk, _| { + (Stones, Ground, |chunk, _| { ((chunk.rockiness - 0.5).max(0.025) * 1.0e-3, None) }), - (Copper, false, |chunk, _| { + (Copper, Ground, |chunk, _| { ((chunk.rockiness - 0.5).max(0.0) * 1.5e-3, None) }), - (Tin, false, |chunk, _| { + (Tin, Ground, |chunk, _| { ((chunk.rockiness - 0.5).max(0.0) * 1.5e-3, None) }), // Don't spawn Mushrooms in snowy regions - (Mushroom, false, |_, col| { + (Mushroom, Ground, |_, col| { ( close(col.temp, 0.3, 0.4).min(close(col.humidity, CONFIG.forest_hum, 0.35)) * MUSH_FACT, @@ -189,7 +213,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // Grass - (ShortGrass, false, |_, col| { + (ShortGrass, Ground, |_, col| { ( close(col.temp, 0.2, 0.75).min(close(col.humidity, CONFIG.jungle_hum, 0.4)) * GRASS_FACT @@ -197,7 +221,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { Some((0.3, 64.0, 0.3)), ) }), - (MediumGrass, false, |_, col| { + (MediumGrass, Ground, |_, col| { ( close(col.temp, 0.2, 0.6).min(close(col.humidity, CONFIG.jungle_hum, 0.4)) * GRASS_FACT @@ -205,7 +229,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { Some((0.3, 64.0, 0.3)), ) }), - (LongGrass, false, |_, col| { + (LongGrass, Ground, |_, col| { ( close(col.temp, 0.3, 0.35).min(close(col.humidity, CONFIG.jungle_hum, 0.3)) * GRASS_FACT @@ -213,8 +237,17 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { Some((0.1, 48.0, 0.3)), ) }), + (JungleRedGrass, Ground, |_, col| { + ( + close(col.temp, 0.3, 0.4).min(close(col.humidity, CONFIG.jungle_hum, 0.4)) + * col.tree_density + * MUSH_FACT + * 350.0, + Some((0.0, 128.0, 0.25)), + ) + }), // Jungle Sprites - // (LongGrass, false, |c, col| { + // (LongGrass, Ground, |c, col| { // ( // close(col.temp, CONFIG.tropical_temp, 0.4).min(close( // col.humidity, @@ -224,7 +257,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { // Some((0.0, 60.0, 5.0)), // ) // }), - /*(WheatGreen, false, |c, col| { + /*(WheatGreen, Ground, |c, col| { ( close(col.temp, 0.4, 0.2).min(close(col.humidity, CONFIG.forest_hum, 0.1)) * MUSH_FACT @@ -232,7 +265,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { None, ) }),*/ - (GrassSnow, false, |_, col| { + (GrassSnow, Ground, |_, col| { ( close(col.temp, CONFIG.snow_temp - 0.2, 0.4).min(close( col.humidity, @@ -243,7 +276,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { Some((0.0, 48.0, 0.2)), ) }), - (Moonbell, false, |_, col| { + (Moonbell, Ground, |_, col| { ( close(col.temp, CONFIG.snow_temp - 0.2, 0.4).min(close( col.humidity, @@ -254,7 +287,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // Savanna Plants - (SavannaGrass, false, |_, col| { + (SavannaGrass, Ground, |_, col| { ( { let savanna = close(col.temp, 1.0, 0.4) * close(col.humidity, 0.2, 0.25); @@ -264,7 +297,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { Some((0.15, 64.0, 0.2)), ) }), - (TallSavannaGrass, false, |_, col| { + (TallSavannaGrass, Ground, |_, col| { ( { let savanna = close(col.temp, 1.0, 0.4) * close(col.humidity, 0.2, 0.25); @@ -274,7 +307,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { Some((0.1, 48.0, 0.2)), ) }), - (RedSavannaGrass, false, |_, col| { + (RedSavannaGrass, Ground, |_, col| { ( { let savanna = close(col.temp, 1.0, 0.4) * close(col.humidity, 0.2, 0.25); @@ -284,7 +317,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { Some((0.15, 48.0, 0.25)), ) }), - (SavannaBush, false, |_, col| { + (SavannaBush, Ground, |_, col| { ( { let savanna = close(col.temp, 1.0, 0.4) * close(col.humidity, 0.2, 0.25); @@ -295,61 +328,50 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // Desert Plants - (DeadBush, false, |_, col| { + (DeadBush, Ground, |_, col| { ( close(col.temp, 1.0, 0.95).min(close(col.humidity, 0.0, 0.3)) * MUSH_FACT * 7.5, None, ) }), - (Pyrebloom, false, |_, col| { + (Pyrebloom, Ground, |_, col| { ( close(col.temp, 1.0, 0.95).min(close(col.humidity, 0.0, 0.3)) * MUSH_FACT * 0.35, None, ) }), - (LargeCactus, false, |_, col| { + (LargeCactus, Ground, |_, col| { ( close(col.temp, 1.0, 0.25).min(close(col.humidity, 0.0, 0.1)) * MUSH_FACT * 1.5, None, ) }), - (RoundCactus, false, |_, col| { + (RoundCactus, Ground, |_, col| { ( close(col.temp, 1.0, 0.25).min(close(col.humidity, 0.0, 0.1)) * MUSH_FACT * 2.5, None, ) }), - (ShortCactus, false, |_, col| { + (ShortCactus, Ground, |_, col| { ( close(col.temp, 1.0, 0.25).min(close(col.humidity, 0.0, 0.1)) * MUSH_FACT * 2.5, None, ) }), - (MedFlatCactus, false, |_, col| { + (MedFlatCactus, Ground, |_, col| { ( close(col.temp, 1.0, 0.25).min(close(col.humidity, 0.0, 0.1)) * MUSH_FACT * 2.5, None, ) }), - (ShortFlatCactus, false, |_, col| { + (ShortFlatCactus, Ground, |_, col| { ( close(col.temp, 1.0, 0.25).min(close(col.humidity, 0.0, 0.1)) * MUSH_FACT * 2.5, None, ) }), - (Reed, false, |_, col| { - ( - close(col.humidity, CONFIG.jungle_hum, 0.9) - * col - .water_dist - .map(|wd| Lerp::lerp(0.2, 0.0, (wd / 8.0).clamped(0.0, 1.0))) - .unwrap_or(0.0) - * ((col.alt - CONFIG.sea_level) / 12.0).clamped(0.0, 1.0), - Some((0.2, 128.0, 0.5)), - ) - }), // Underwater chests - (ChestBuried, true, |_, col| { + (ChestBuried, Underwater, |_, col| { ( MUSH_FACT * 1.0e-6 @@ -362,7 +384,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // Underwater mud piles - (Mud, true, |_, col| { + (Mud, Underwater, |_, col| { ( MUSH_FACT * 1.0e-3 @@ -375,7 +397,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // Underwater grass - (GrassBlue, true, |_, col| { + (GrassBlue, Underwater, |_, col| { ( MUSH_FACT * 250.0 @@ -388,7 +410,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // seagrass - (Seagrass, true, |_, col| { + (Seagrass, Underwater, |_, col| { ( close(col.temp, CONFIG.temperate_temp, 0.8) * MUSH_FACT @@ -404,7 +426,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // seagrass, coastal patches - (Seagrass, true, |_, col| { + (Seagrass, Underwater, |_, col| { ( MUSH_FACT * 600.0 @@ -417,7 +439,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // scattered seaweed (temperate species) - (SeaweedTemperate, true, |_, col| { + (SeaweedTemperate, Underwater, |_, col| { ( close(col.temp, CONFIG.temperate_temp, 0.8) * MUSH_FACT @@ -433,7 +455,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // scattered seaweed (tropical species) - (SeaweedTropical, true, |_, col| { + (SeaweedTropical, Underwater, |_, col| { ( close(col.temp, 1.0, 0.95) * MUSH_FACT @@ -449,7 +471,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // Caulerpa lentillifera algae patch - (SeaGrapes, true, |_, col| { + (SeaGrapes, Underwater, |_, col| { ( MUSH_FACT * 250.0 @@ -464,7 +486,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // Caulerpa prolifera algae patch - (WavyAlgae, true, |_, col| { + (WavyAlgae, Underwater, |_, col| { ( MUSH_FACT * 250.0 @@ -479,7 +501,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // Mermaids' fan algae patch - (MermaidsFan, true, |_, col| { + (MermaidsFan, Underwater, |_, col| { ( close(col.temp, 1.0, 0.95) * MUSH_FACT @@ -495,7 +517,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // Sea anemones - (SeaAnemone, true, |_, col| { + (SeaAnemone, Underwater, |_, col| { ( close(col.temp, CONFIG.temperate_temp, 0.8) * MUSH_FACT @@ -511,7 +533,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // Giant Kelp - (GiantKelp, true, |_, col| { + (GiantKelp, Underwater, |_, col| { ( close(col.temp, CONFIG.temperate_temp, 0.8) * MUSH_FACT @@ -527,7 +549,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // Bull Kelp - (BullKelp, true, |_, col| { + (BullKelp, Underwater, |_, col| { ( close(col.temp, CONFIG.temperate_temp, 0.7) * MUSH_FACT @@ -543,7 +565,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // Stony Corals - (StonyCoral, true, |_, col| { + (StonyCoral, Underwater, |_, col| { ( close(col.temp, 1.0, 0.9) * MUSH_FACT @@ -559,7 +581,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // Soft Corals - (SoftCoral, true, |_, col| { + (SoftCoral, Underwater, |_, col| { ( close(col.temp, 1.0, 0.9) * MUSH_FACT @@ -575,7 +597,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ) }), // Seashells - (Seashells, true, |c, col| { + (Seashells, Underwater, |c, col| { ( (c.rockiness - 0.5).max(0.0) * 1.0e-3 @@ -589,7 +611,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { None, ) }), - (Stones, true, |c, col| { + (Stones, Underwater, |c, col| { ( (c.rockiness - 0.5).max(0.0) * 1.0e-3 @@ -601,6 +623,42 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { None, ) }), + //River-related scatter + (LillyPads, Floating, |_, col| { + ( + close(col.temp, 0.2, 0.6).min(close(col.humidity, CONFIG.jungle_hum, 0.4)) + * GRASS_FACT + * 100.0 + * ((col.alt - CONFIG.sea_level) / 12.0).clamped(0.0, 1.0) + * col + .water_dist + .map_or(0.0, |d| 1.0 / (1.0 + (d.abs() * 0.4).powi(2))), + Some((0.0, 128.0, 0.35)), + ) + }), + (Reed, Underwater, |_, col| { + ( + close(col.temp, 0.2, 0.6).min(close(col.humidity, CONFIG.jungle_hum, 0.4)) + * GRASS_FACT + * 100.0 + * ((col.alt - CONFIG.sea_level) / 12.0).clamped(0.0, 1.0) + * col + .water_dist + .map_or(0.0, |d| 1.0 / (1.0 + (d.abs() * 0.40).powi(2))), + Some((0.2, 128.0, 0.5)), + ) + }), + (Reed, Ground, |_, col| { + ( + close(col.humidity, CONFIG.jungle_hum, 0.9) + * col + .water_dist + .map(|wd| Lerp::lerp(0.2, 0.0, (wd / 8.0).clamped(0.0, 1.0))) + .unwrap_or(0.0) + * ((col.alt - CONFIG.sea_level) / 12.0).clamped(0.0, 1.0), + Some((0.2, 128.0, 0.5)), + ) + }), ]; canvas.foreach_col(|canvas, wpos2d, col| { @@ -609,7 +667,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { let kind = scatter .iter() .enumerate() - .find_map(|(i, (kind, is_underwater, f))| { + .find_map(|(i, (kind, water_mode, f))| { let (density, patch) = f(canvas.chunk(), col); let density = patch .map(|(base_density_prop, wavelen, threshold)| { @@ -633,31 +691,28 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { .unwrap_or(density); if density > 0.0 && rng.gen::() < density //RandomField::new(i as u32).chance(Vec3::new(wpos2d.x, wpos2d.y, 0), density) - && underwater == *is_underwater + && matches!(&water_mode, Underwater | Floating) == underwater { - Some(*kind) + Some((*kind, water_mode)) } else { None } }); - if let Some(kind) = kind { - let alt = col.alt as i32; + if let Some((kind, water_mode)) = kind { + let (alt, is_under): (_, fn(Block) -> bool) = match water_mode { + Ground | Underwater => (col.alt as i32, |block| block.is_solid()), + Floating => (col.water_level as i32, |block| !block.is_air()), + }; // Find the intersection between ground and air, if there is one near the - // surface + // Ground if let Some(solid_end) = (-4..8) - .find(|z| { - canvas - .get(Vec3::new(wpos2d.x, wpos2d.y, alt + z)) - .is_solid() - }) + .find(|z| is_under(canvas.get(Vec3::new(wpos2d.x, wpos2d.y, alt + z)))) .and_then(|solid_start| { - (1..8).map(|z| solid_start + z).find(|z| { - !canvas - .get(Vec3::new(wpos2d.x, wpos2d.y, alt + z)) - .is_solid() - }) + (1..8) + .map(|z| solid_start + z) + .find(|z| !is_under(canvas.get(Vec3::new(wpos2d.x, wpos2d.y, alt + z)))) }) { canvas.map(Vec3::new(wpos2d.x, wpos2d.y, alt + solid_end), |block| {