From fb316e8f6667c2fd8ac9fc0ee67669cfb1273552 Mon Sep 17 00:00:00 2001 From: floppy Date: Mon, 24 Jan 2022 19:36:13 +0100 Subject: [PATCH] SeaCrocodile spawning in tropical Oceans --- .../entity/wild/aggressive/sea_crocodile.ron | 11 ++++ assets/common/npc_names.ron | 4 ++ assets/voxygen/audio/sfx.ron | 7 +++ .../sfx/utterance/sea_crocodile_angry1.ogg | 3 ++ .../sfx/utterance/sea_crocodile_angry2.ogg | 3 ++ .../voxel/npc/sea_crocodile/male/chest.vox | 3 ++ .../voxel/npc/sea_crocodile/male/foot_br.vox | 3 ++ .../voxel/npc/sea_crocodile/male/foot_fr.vox | 3 ++ .../npc/sea_crocodile/male/head_lower.vox | 3 ++ .../npc/sea_crocodile/male/head_upper.vox | 3 ++ .../voxel/npc/sea_crocodile/male/jaw.vox | 3 ++ .../npc/sea_crocodile/male/tail_front.vox | 3 ++ .../npc/sea_crocodile/male/tail_rear.vox | 3 ++ .../voxel/quadruped_low_central_manifest.ron | 52 +++++++++++++++++++ .../voxel/quadruped_low_lateral_manifest.ron | 36 +++++++++++++ .../world/wildlife/spawn/tropical/ocean.ron | 13 +++++ common/src/comp/body.rs | 2 + common/src/comp/body/quadruped_low.rs | 6 ++- common/src/comp/inventory/loadout_builder.rs | 1 + common/src/states/utils.rs | 1 + voxygen/anim/src/quadruped_low/mod.rs | 11 ++++ voxygen/src/audio/sfx/mod.rs | 2 + world/src/layer/wildlife.rs | 9 ++++ 23 files changed, 184 insertions(+), 1 deletion(-) create mode 100644 assets/common/entity/wild/aggressive/sea_crocodile.ron create mode 100644 assets/voxygen/audio/sfx/utterance/sea_crocodile_angry1.ogg create mode 100644 assets/voxygen/audio/sfx/utterance/sea_crocodile_angry2.ogg create mode 100644 assets/voxygen/voxel/npc/sea_crocodile/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/sea_crocodile/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/sea_crocodile/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/sea_crocodile/male/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/sea_crocodile/male/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/sea_crocodile/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/sea_crocodile/male/tail_front.vox create mode 100644 assets/voxygen/voxel/npc/sea_crocodile/male/tail_rear.vox create mode 100644 assets/world/wildlife/spawn/tropical/ocean.ron diff --git a/assets/common/entity/wild/aggressive/sea_crocodile.ron b/assets/common/entity/wild/aggressive/sea_crocodile.ron new file mode 100644 index 0000000000..35e252de0d --- /dev/null +++ b/assets/common/entity/wild/aggressive/sea_crocodile.ron @@ -0,0 +1,11 @@ +EntityConfig ( + name: Automatic, + body: RandomWith("sea_crocodile"), + alignment: Alignment(Enemy), + + loot: LootTable("common.loot_tables.creature.quad_low.generic"), + + hands: Uninit, + + meta: [], +) diff --git a/assets/common/npc_names.ron b/assets/common/npc_names.ron index 7168fca7d2..5df5fc95cb 100644 --- a/assets/common/npc_names.ron +++ b/assets/common/npc_names.ron @@ -1150,6 +1150,10 @@ keyword: "crocodile", generic: "Crocodile" ), + sea_crocodile: ( + keyword: "sea_crocodile", + generic: "SeaCrocodile" + ), alligator: ( keyword: "alligator", generic: "Alligator" diff --git a/assets/voxygen/audio/sfx.ron b/assets/voxygen/audio/sfx.ron index 82e6eedeb7..b098b45dbf 100644 --- a/assets/voxygen/audio/sfx.ron +++ b/assets/voxygen/audio/sfx.ron @@ -999,6 +999,13 @@ ], threshold: 1.0, ), + Utterance(Angry, SeaCrocodile): ( + files: [ + "voxygen.audio.sfx.utterance.sea_crocodile_angry1", + "voxygen.audio.sfx.utterance.sea_crocodile_angry2", + ], + threshold: 1.0, + ), Utterance(Angry, Saurok): ( files: [ "voxygen.audio.sfx.utterance.saurok_angry1", diff --git a/assets/voxygen/audio/sfx/utterance/sea_crocodile_angry1.ogg b/assets/voxygen/audio/sfx/utterance/sea_crocodile_angry1.ogg new file mode 100644 index 0000000000..2299e77965 --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/sea_crocodile_angry1.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5920dc949bd67c4a5bf3fd5fbb37bec8bfbd9c95c4646c7dba8bde957484387 +size 29963 diff --git a/assets/voxygen/audio/sfx/utterance/sea_crocodile_angry2.ogg b/assets/voxygen/audio/sfx/utterance/sea_crocodile_angry2.ogg new file mode 100644 index 0000000000..f02cf0742d --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/sea_crocodile_angry2.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0e2e8dd41e1b06a0758d78f86698434879b970115a2d34de666faf6429a224c +size 32339 diff --git a/assets/voxygen/voxel/npc/sea_crocodile/male/chest.vox b/assets/voxygen/voxel/npc/sea_crocodile/male/chest.vox new file mode 100644 index 0000000000..383bd0a35a --- /dev/null +++ b/assets/voxygen/voxel/npc/sea_crocodile/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d359671486e0bd73c15c57a736d495531dbba857d79597b421b86b23fe3fbbb7 +size 8656 diff --git a/assets/voxygen/voxel/npc/sea_crocodile/male/foot_br.vox b/assets/voxygen/voxel/npc/sea_crocodile/male/foot_br.vox new file mode 100644 index 0000000000..770e7d2f7c --- /dev/null +++ b/assets/voxygen/voxel/npc/sea_crocodile/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0255a21d512b2d205a180f700599f54ec903b0cc55e31ac50bf1d4283010dd3 +size 1648 diff --git a/assets/voxygen/voxel/npc/sea_crocodile/male/foot_fr.vox b/assets/voxygen/voxel/npc/sea_crocodile/male/foot_fr.vox new file mode 100644 index 0000000000..a3e03f1d43 --- /dev/null +++ b/assets/voxygen/voxel/npc/sea_crocodile/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33bc76748b3db16719ff9d2f623a5c35216f6031a54d7ee69d3e1ebb22866bf5 +size 1736 diff --git a/assets/voxygen/voxel/npc/sea_crocodile/male/head_lower.vox b/assets/voxygen/voxel/npc/sea_crocodile/male/head_lower.vox new file mode 100644 index 0000000000..c7508db9d5 --- /dev/null +++ b/assets/voxygen/voxel/npc/sea_crocodile/male/head_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:160c5bbaeb38a12006b86b82349f165878adc98ad1ae046dcb12f2d5aa01b28d +size 2776 diff --git a/assets/voxygen/voxel/npc/sea_crocodile/male/head_upper.vox b/assets/voxygen/voxel/npc/sea_crocodile/male/head_upper.vox new file mode 100644 index 0000000000..d05392af83 --- /dev/null +++ b/assets/voxygen/voxel/npc/sea_crocodile/male/head_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5800fc974a27bef31d75a33a4f90afbb2e607babde77f7f57a630fbf2c539740 +size 3120 diff --git a/assets/voxygen/voxel/npc/sea_crocodile/male/jaw.vox b/assets/voxygen/voxel/npc/sea_crocodile/male/jaw.vox new file mode 100644 index 0000000000..427e9b9a11 --- /dev/null +++ b/assets/voxygen/voxel/npc/sea_crocodile/male/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1caae7f11ff066466455c138368afbc24d6c5b2a1e2ea7a37baed9b42a7522c +size 2936 diff --git a/assets/voxygen/voxel/npc/sea_crocodile/male/tail_front.vox b/assets/voxygen/voxel/npc/sea_crocodile/male/tail_front.vox new file mode 100644 index 0000000000..d3f78d7b46 --- /dev/null +++ b/assets/voxygen/voxel/npc/sea_crocodile/male/tail_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33c69c0f60fafb37d115f2877a42eb6fbf2e010e0ca7fb1d73730d7ea2234d1c +size 3112 diff --git a/assets/voxygen/voxel/npc/sea_crocodile/male/tail_rear.vox b/assets/voxygen/voxel/npc/sea_crocodile/male/tail_rear.vox new file mode 100644 index 0000000000..e2610adb19 --- /dev/null +++ b/assets/voxygen/voxel/npc/sea_crocodile/male/tail_rear.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3974f5fa2fc7d846d04ee649ef8af69120a7662d413ceba8e22b5ef8ba8570f4 +size 2696 diff --git a/assets/voxygen/voxel/quadruped_low_central_manifest.ron b/assets/voxygen/voxel/quadruped_low_central_manifest.ron index 3e6fce9432..6ff66eec07 100644 --- a/assets/voxygen/voxel/quadruped_low_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_low_central_manifest.ron @@ -51,6 +51,58 @@ central: ("npc.crocodile.male.tail_front"), ), ), + (SeaCrocodile, Male): ( + upper: ( + offset: (-3.0, 5.0, -1.0), + central: ("npc.sea_crocodile.male.head_upper"), + ), + lower: ( + offset: (-4.0, 1.5, -3.0), + central: ("npc.sea_crocodile.male.head_lower"), + ), + jaw: ( + offset: (-4.0, 2.5, -1.5), + central: ("npc.sea_crocodile.male.jaw"), + ), + chest: ( + offset: (-6.0, -7.5, -3.0), + central: ("npc.sea_crocodile.male.chest"), + ), + tail_rear: ( + offset: (-1.0, -14.0, -1.0), + central: ("npc.sea_crocodile.male.tail_rear"), + ), + tail_front: ( + offset: (-2.0, -11.0, -3.0), + central: ("npc.sea_crocodile.male.tail_front"), + ), + ), + (SeaCrocodile, Female): ( + upper: ( + offset: (-3.0, 5.0, -1.0), + central: ("npc.sea_crocodile.male.head_upper"), + ), + lower: ( + offset: (-4.0, 1.5, -3.0), + central: ("npc.sea_crocodile.male.head_lower"), + ), + jaw: ( + offset: (-4.0, 2.5, -1.5), + central: ("npc.sea_crocodile.male.jaw"), + ), + chest: ( + offset: (-6.0, -7.5, -3.0), + central: ("npc.sea_crocodile.male.chest"), + ), + tail_rear: ( + offset: (-1.0, -14.0, -1.0),//full length of y dimension + central: ("npc.sea_crocodile.male.tail_rear"), + ), + tail_front: ( + offset: (-2.0, -11.0, -3.0),//full length of y dimension + central: ("npc.sea_crocodile.male.tail_front"), + ), + ), (Alligator, Male): ( upper: ( offset: (-4.0, -0.0, -2.5), diff --git a/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron index 22a7e6d79a..d39d73d77f 100644 --- a/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron @@ -35,6 +35,42 @@ lateral: ("npc.crocodile.male.foot_br", false), ), ), + (SeaCrocodile, Male): ( + front_left: ( + offset: (-7.0, -0.0, -4.0),//full x dimension, 0 y dimension, full z dimension + lateral: ("npc.sea_crocodile.male.foot_fr", false), + ), + front_right: ( + offset: (0.0, -0.0, -4.0),//0 x dimension, 0 y dimension, full z dimension + lateral: ("npc.sea_crocodile.male.foot_fr", false), + ), + back_left: ( + offset: (-8.0, -0.0, -4.0),//full x dimension, 0 y dimension, full z dimension + lateral: ("npc.sea_crocodile.male.foot_br", false), + ), + back_right: ( + offset: (0.0, -0.0, -4.0),//0 x dimension, 0 y dimension, full z dimension + lateral: ("npc.sea_crocodile.male.foot_br", false), + ), + ), + (SeaCrocodile, Female): ( + front_left: ( + offset: (-7.0, -0.0, -4.0), + lateral: ("npc.sea_crocodile.male.foot_fr", false), + ), + front_right: ( + offset: (0.0, -0.0, -4.0), + lateral: ("npc.sea_crocodile.male.foot_fr", false), + ), + back_left: ( + offset: (-8.0, -0.0, -4.0), + lateral: ("npc.sea_crocodile.male.foot_br", false), + ), + back_right: ( + offset: (0.0, -0.0, -4.0), + lateral: ("npc.sea_crocodile.male.foot_br", false), + ), + ), (Alligator, Male): ( front_left: ( offset: (-7.0, 0.0, -4.0), diff --git a/assets/world/wildlife/spawn/tropical/ocean.ron b/assets/world/wildlife/spawn/tropical/ocean.ron new file mode 100644 index 0000000000..5e5596affa --- /dev/null +++ b/assets/world/wildlife/spawn/tropical/ocean.ron @@ -0,0 +1,13 @@ +SpawnEntry ( + name: "Ocean water wildlife.", + note: "Ocean inhabitants", + rules: [ + Pack( + groups: [ + (1, (3, 4, "common.entity.wild.aggressive.sea_crocodile")), + ], + is_underwater: true, + day_period: [Night, Morning, Noon, Evening], + ), + ], +) diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index 475c5adc67..f64052232f 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -230,6 +230,7 @@ impl Body { // saltwater crocodiles can weigh around 1 ton, but our version is the size of an // alligator or smaller, so whatever quadruped_low::Species::Crocodile => 360.0, + quadruped_low::Species::SeaCrocodile => 410.0, quadruped_low::Species::Deadwood => 400.0, quadruped_low::Species::Lavadrake => 500.0, quadruped_low::Species::Monitor => 100.0, @@ -645,6 +646,7 @@ impl Body { }, Body::QuadrupedLow(quadruped_low) => match quadruped_low.species { quadruped_low::Species::Crocodile => 80, + quadruped_low::Species::SeaCrocodile => 110, quadruped_low::Species::Alligator => 90, quadruped_low::Species::Monitor => 60, quadruped_low::Species::Asp => 75, diff --git a/common/src/comp/body/quadruped_low.rs b/common/src/comp/body/quadruped_low.rs index 50cacad50f..4711946a4c 100644 --- a/common/src/comp/body/quadruped_low.rs +++ b/common/src/comp/body/quadruped_low.rs @@ -54,6 +54,7 @@ make_case_elim!( Basilisk = 12, Deadwood = 13, Icedrake = 14, + SeaCrocodile = 15, } ); @@ -63,6 +64,7 @@ make_case_elim!( #[derive(Clone, Debug, Deserialize)] pub struct AllSpecies { pub crocodile: SpeciesMeta, + pub sea_crocodile: SpeciesMeta, pub alligator: SpeciesMeta, pub salamander: SpeciesMeta, pub monitor: SpeciesMeta, @@ -86,6 +88,7 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies fn index(&self, &index: &'a Species) -> &Self::Output { match index { Species::Crocodile => &self.crocodile, + Species::SeaCrocodile => &self.sea_crocodile, Species::Alligator => &self.alligator, Species::Salamander => &self.salamander, Species::Monitor => &self.monitor, @@ -104,8 +107,9 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies } } -pub const ALL_SPECIES: [Species; 15] = [ +pub const ALL_SPECIES: [Species; 16] = [ Species::Crocodile, + Species::SeaCrocodile, Species::Alligator, Species::Salamander, Species::Monitor, diff --git a/common/src/comp/inventory/loadout_builder.rs b/common/src/comp/inventory/loadout_builder.rs index 890d62c3d7..95721cc136 100644 --- a/common/src/comp/inventory/loadout_builder.rs +++ b/common/src/comp/inventory/loadout_builder.rs @@ -229,6 +229,7 @@ fn default_main_tool(body: &Body) -> Item { "common.items.npc_weapons.unique.asp", )), quadruped_low::Species::Crocodile + | quadruped_low::Species::SeaCrocodile | quadruped_low::Species::Alligator | quadruped_low::Species::Salamander => Some(Item::new_from_asset_expect( "common.items.npc_weapons.unique.quadlowtail", diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs index 67d8f920c6..209656aa61 100644 --- a/common/src/states/utils.rs +++ b/common/src/states/utils.rs @@ -113,6 +113,7 @@ impl Body { Body::Theropod(_) => 135.0, Body::QuadrupedLow(quadruped_low) => match quadruped_low.species { quadruped_low::Species::Crocodile => 130.0, + quadruped_low::Species::SeaCrocodile => 120.0, quadruped_low::Species::Alligator => 110.0, quadruped_low::Species::Salamander => 85.0, quadruped_low::Species::Monitor => 160.0, diff --git a/voxygen/anim/src/quadruped_low/mod.rs b/voxygen/anim/src/quadruped_low/mod.rs index cd34de941a..66a70fec99 100644 --- a/voxygen/anim/src/quadruped_low/mod.rs +++ b/voxygen/anim/src/quadruped_low/mod.rs @@ -150,6 +150,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { Self { head_upper: match (body.species, body.body_type) { (Crocodile, _) => (1.5, 2.0), + (SeaCrocodile, _) => (1.5, 2.0), (Alligator, _) => (0.5, 2.0), (Salamander, Male) => (0.5, 2.5), (Salamander, Female) => (0.5, 1.0), @@ -168,6 +169,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { }, head_lower: match (body.species, body.body_type) { (Crocodile, _) => (8.0, 0.0), + (SeaCrocodile, _) => (8.0, 0.0), (Alligator, _) => (9.0, 0.25), (Salamander, Male) => (9.0, 0.0), (Salamander, Female) => (9.0, 0.0), @@ -186,6 +188,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { }, jaw: match (body.species, body.body_type) { (Crocodile, _) => (2.5, -3.0), + (SeaCrocodile, _) => (2.5, -3.0), (Alligator, _) => (2.5, -2.0), (Salamander, Male) => (0.0, -2.0), (Salamander, Female) => (0.5, -1.0), @@ -204,6 +207,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { }, chest: match (body.species, body.body_type) { (Crocodile, _) => (0.0, 5.0), + (SeaCrocodile, _) => (0.0, 5.0), (Alligator, _) => (0.0, 5.0), (Salamander, Male) => (0.0, 5.0), (Salamander, Female) => (0.0, 5.0), @@ -222,6 +226,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { }, tail_rear: match (body.species, body.body_type) { (Crocodile, _) => (-12.5, -1.0), + (SeaCrocodile, _) => (-12.5, -1.0), (Alligator, _) => (-13.0, -1.0), (Salamander, Male) => (-8.0, 0.0), (Salamander, Female) => (-6.5, 0.0), @@ -240,6 +245,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { }, tail_front: match (body.species, body.body_type) { (Crocodile, _) => (-6.0, 0.0), + (SeaCrocodile, _) => (-6.0, 0.0), (Alligator, _) => (-5.0, 0.0), (Salamander, Male) => (-7.5, 0.0), (Salamander, Female) => (-7.0, 0.0), @@ -258,6 +264,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { }, feet_f: match (body.species, body.body_type) { (Crocodile, _) => (3.5, 6.0, -1.0), + (SeaCrocodile, _) => (3.5, 6.0, -1.0), (Alligator, _) => (4.5, 4.25, -1.0), (Salamander, Male) => (5.0, 5.0, -2.0), (Salamander, Female) => (5.0, 4.5, -2.0), @@ -276,6 +283,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { }, feet_b: match (body.species, body.body_type) { (Crocodile, _) => (3.5, -6.0, -1.0), + (SeaCrocodile, _) => (3.5, -6.0, -1.0), (Alligator, _) => (4.5, -5.5, -1.0), (Salamander, Male) => (4.0, -6.0, -2.0), (Salamander, Female) => (3.0, -6.0, -2.0), @@ -298,6 +306,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { }, scaler: match (body.species, body.body_type) { (Crocodile, _) => (1.05), + (SeaCrocodile, _) => (1.05), (Alligator, _) => (1.12), (Salamander, _) => (1.12), (Monitor, _) => (0.9), @@ -313,6 +322,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { }, tempo: match (body.species, body.body_type) { (Crocodile, _) => (0.7), + (SeaCrocodile, _) => (0.7), (Alligator, _) => (0.7), (Salamander, _) => (0.85), (Monitor, _) => (1.4), @@ -333,6 +343,7 @@ fn mount_point(body: &Body) -> Vec3 { use comp::quadruped_low::{BodyType::*, Species::*}; match (body.species, body.body_type) { (Crocodile, _) => (0.0, 4.5, -2.0), + (SeaCrocodile, _) => (0.0, 4.5, -2.0), (Alligator, _) => (0.0, 4.25, -2.0), (Salamander, Male) => (0.0, 5.0, -1.0), (Salamander, Female) => (0.0, 5.0, -1.0), diff --git a/voxygen/src/audio/sfx/mod.rs b/voxygen/src/audio/sfx/mod.rs index e586161ac5..25bdcde277 100644 --- a/voxygen/src/audio/sfx/mod.rs +++ b/voxygen/src/audio/sfx/mod.rs @@ -207,6 +207,7 @@ pub enum VoiceKind { Adlet, Antelope, Alligator, + SeaCrocodile, Saurok, Cat, Goat, @@ -225,6 +226,7 @@ fn body_to_voice(body: &Body) -> Option { Body::QuadrupedLow(body) => match body.species { quadruped_low::Species::Maneater => VoiceKind::Maneater, quadruped_low::Species::Alligator => VoiceKind::Alligator, + quadruped_low::Species::SeaCrocodile => VoiceKind::SeaCrocodile, quadruped_low::Species::Asp => VoiceKind::Asp, _ => return None, }, diff --git a/world/src/layer/wildlife.rs b/world/src/layer/wildlife.rs index 4793a4064f..11a4e38c9d 100644 --- a/world/src/layer/wildlife.rs +++ b/world/src/layer/wildlife.rs @@ -262,6 +262,15 @@ pub fn spawn_manifest() -> Vec<(&'static str, DensityFn)> { 0.0 } }), + // Ocean animals + ("world.wildlife.spawn.tropical.ocean", |_c, col| { + close(col.temp, CONFIG.tropical_temp, 0.1) + * if col.water_dist.map(|d| d < 1.0).unwrap_or(false) && col.tree_density < 0.1 { + 0.001 + } else { + 0.0 + } + }), // Rainforest area animals ("world.wildlife.spawn.tropical.rainforest", |c, _col| { close(c.temp, CONFIG.tropical_temp + 0.1, 0.4)