diff --git a/AUTHORS.md b/AUTHORS.md index fc3478c7..d19dac46 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -3,15 +3,15 @@ We thank all of the following individuals for their contributions to Nautilus. T | Name | Picture | Commits | Name | Picture | Commits | Name | Picture | Commits | | ---- | --------------- | ------ | ---- | --------------- | ------ | ---- | --------------- | ------ | -| [MrPurple6411](https://github.com/MrPurple6411) | | 451 | [PrimeSonic](https://github.com/PrimeSonic) | | 312 | [Metious](https://github.com/Metious) | | 309 | +| [MrPurple6411](https://github.com/MrPurple6411) | | 457 | [Metious](https://github.com/Metious) | | 314 | [PrimeSonic](https://github.com/PrimeSonic) | | 312 | | [toebeann](https://github.com/toebeann) | | 228 | [ahk1221](https://github.com/ahk1221) | | 212 | [Alexejhero](https://github.com/Alexejhero) | | 207 | -| [LeeTwentyThree](https://github.com/LeeTwentyThree) | | 126 | [zorgesho](https://github.com/zorgesho) | | 42 | [JKohlman](https://github.com/JKohlman) | | 37 | +| [LeeTwentyThree](https://github.com/LeeTwentyThree) | | 129 | [zorgesho](https://github.com/zorgesho) | | 42 | [JKohlman](https://github.com/JKohlman) | | 37 | | [K07H](https://github.com/K07H) | | 22 | [Vlad-00003](https://github.com/Vlad-00003) | | 11 | [EckoTheBat](https://github.com/EckoTheBat) | | 11 | -| [github-actions[bot]](https://github.com/apps/github-actions) | | 8 | [Cattlesquat](https://github.com/Cattlesquat) | | 5 | [DingoDjango](https://github.com/DingoDjango) | | 4 | +| [github-actions[bot]](https://github.com/apps/github-actions) | | 9 | [Cattlesquat](https://github.com/Cattlesquat) | | 5 | [DingoDjango](https://github.com/DingoDjango) | | 4 | | [celvro](https://github.com/celvro) | | 4 | [NeisesMike](https://github.com/NeisesMike) | | 3 | [VELD-Dev](https://github.com/VELD-Dev) | | 3 | | [vlyon](https://github.com/vlyon) | | 3 | [EldritchCarMaker](https://github.com/EldritchCarMaker) | | 3 | [jonahnm](https://github.com/jonahnm) | | 3 | | [brett-taylor](https://github.com/brett-taylor) | | 2 | [RamuneNeptune](https://github.com/RamuneNeptune) | | 2 | [tinyhoot](https://github.com/tinyhoot) | | 2 | -| [DeadMor0z](https://github.com/DeadMor0z) | | 1 | [SamuramongeDev](https://github.com/SamuramongeDev) | | 1 | +| [DeadMor0z](https://github.com/DeadMor0z) | | 1 | [Govorunb](https://github.com/Govorunb) | | 1 | [SamuramongeDev](https://github.com/SamuramongeDev) | | 1 | If you notice a problem with this file, feel free to report an issue in the repository. diff --git a/Example mod/BiomeHandlerExample.cs b/Example mod/BiomeHandlerExample.cs new file mode 100644 index 00000000..7a36effd --- /dev/null +++ b/Example mod/BiomeHandlerExample.cs @@ -0,0 +1,41 @@ +using BepInEx; +using Nautilus.Assets; +using Nautilus.Assets.PrefabTemplates; +using Nautilus.Handlers; +using Nautilus.Utility; +using UnityEngine; + +namespace Nautilus.Examples; + +[BepInPlugin("com.snmodding.nautilus.biomehandler", "Nautilus Biome Example Mod", Nautilus.PluginInfo.PLUGIN_VERSION)] +[BepInDependency("com.snmodding.nautilus")] +public class BiomeHandlerExample : BaseUnityPlugin +{ + private void Awake() + { + // Register the new biome into the game + var lilyPadsFogSettings = BiomeUtils.CreateBiomeSettings(new Vector3(20, 5, 6), 0.6f, Color.white, 0.45f, + new Color(0.18f, 0.604f, 0.404f), 0.05f, 20, 1, 1.25f, 20); +#if SUBNAUTICA + BiomeHandler.RegisterBiome("nautilusexamplebiome", lilyPadsFogSettings, new BiomeHandler.SkyReference("SkyKelpForest")); +#elif BELOWZERO + BiomeHandler.RegisterBiome("nautilusexamplebiome", lilyPadsFogSettings, new BiomeHandler.SkyReference("SkyLilyPads")); +#endif + + #if SUBNAUTICA + // Add wreck ambience & music + BiomeHandler.AddBiomeMusic("nautilusexamplebiome", AudioUtils.GetFmodAsset("event:/env/music/wreak_ambience_big_music")); + BiomeHandler.AddBiomeAmbience("nautilusexamplebiome", AudioUtils.GetFmodAsset("event:/env/background/wreak_ambience_big"), FMODGameParams.InteriorState.OnlyOutside); + #endif + + // Create an atmosphere volume for the biome + PrefabInfo volumePrefabInfo = PrefabInfo.WithTechType("NautilusExampleBiomeSphereVolume"); + CustomPrefab volumePrefab = new CustomPrefab(volumePrefabInfo); + AtmosphereVolumeTemplate volumeTemplate = new AtmosphereVolumeTemplate(volumePrefabInfo, AtmosphereVolumeTemplate.VolumeShape.Sphere, "nautilusexamplebiome"); + volumePrefab.SetGameObject(volumeTemplate); + volumePrefab.Register(); + + // Add the biome somewhere to the world + CoordinatedSpawnsHandler.RegisterCoordinatedSpawn(new SpawnInfo(volumePrefabInfo.ClassID, new Vector3(-1400, -80, 600), Quaternion.identity, new Vector3(50, 50, 50))); + } +} \ No newline at end of file diff --git a/Nautilus/Assets/PrefabTemplates/AtmosphereVolumeTemplate.cs b/Nautilus/Assets/PrefabTemplates/AtmosphereVolumeTemplate.cs new file mode 100644 index 00000000..2db3ce64 --- /dev/null +++ b/Nautilus/Assets/PrefabTemplates/AtmosphereVolumeTemplate.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections; +using UnityEngine; + +namespace Nautilus.Assets.PrefabTemplates; + +/// +/// A template for Atmosphere Volumes, which are basic invisible triggers for mini-biomes. +/// +public class AtmosphereVolumeTemplate : PrefabTemplate +{ + private const int AtmosphereVolumesLayer = 21; + + /// + /// The shape of this atmosphere volume. + /// + public VolumeShape Shape { get; set; } + /// + /// The biome type used by this atmosphere volume. + /// + public string OverrideBiome { get; set; } + /// + /// The priority of this atmosphere volume. Atmosphere volumes with higher priorities override those with lower priorities. The default priority is 10. + /// + public int Priority { get; set; } + + /// + /// Determines the loading distance of this atmosphere volume prefab. Default value is . Although vanilla prefabs always use Batch for this, this does not work with our custom systems. + /// + public LargeWorldEntity.CellLevel CellLevel { get; set; } + + /// + /// Callback that will get called after the prefab is retrieved. Use this to modify or process your prefab further more. + /// + public System.Action ModifyPrefab { get; set; } + + /// + /// Callback that will get called after the prefab is retrieved. Use this to modify or process your prefab further more asynchronously. + /// + public System.Func ModifyPrefabAsync { get; set; } + + /// + /// Creates a new prefab template for an asset bundle. + /// + /// The prefab info to base this template off of. + /// The shape of this atmosphere volume. + /// The biome type used by this atmosphere volume. + /// The priority of this atmosphere volume. Atmosphere volumes with higher priorities override those with lower priorities. + /// Determines the loading distance of this atmosphere volume prefab. Although vanilla prefabs always use Batch for this, this does not work with our custom systems. + public AtmosphereVolumeTemplate(PrefabInfo info, VolumeShape shape, string overrideBiome, int priority = 10, LargeWorldEntity.CellLevel cellLevel = LargeWorldEntity.CellLevel.Far) : base(info) + { + Shape = shape; + OverrideBiome = overrideBiome; + Priority = priority; + CellLevel = cellLevel; + } + + /// + /// Creates an atmosphere volume prefab. + /// + public override IEnumerator GetPrefabAsync(TaskResult gameObject) + { + var prefab = new GameObject(info.ClassID); + prefab.layer = AtmosphereVolumesLayer; + + Collider collider = Shape switch + { + VolumeShape.Sphere => prefab.AddComponent(), + VolumeShape.Cube => prefab.AddComponent(), + VolumeShape.Capsule => prefab.AddComponent(), + _ => throw new NotImplementedException() + }; + collider.isTrigger = true; + + prefab.AddComponent().ClassId = info.ClassID; + prefab.AddComponent().cellLevel = CellLevel; + + var atmosphereVolume = prefab.AddComponent(); + atmosphereVolume.overrideBiome = OverrideBiome; + atmosphereVolume.priority = Priority; + + ModifyPrefab?.Invoke(prefab); + if (ModifyPrefabAsync is { }) + yield return ModifyPrefabAsync(prefab); + + gameObject.Set(prefab); + } + + /// + /// The shape of an atmosphere volume's trigger. + /// + public enum VolumeShape + { + /// + /// Sphere with default radius 0.5m (diameter 1m). + /// + Sphere, + /// + /// Cube with default dimensions of 1x1x1m. + /// + Cube, + /// + /// Capsule with default radius of 0.5m and height of 2m. + /// + Capsule + } +} \ No newline at end of file diff --git a/Nautilus/Documentation/tutorials/biomes.md b/Nautilus/Documentation/tutorials/biomes.md new file mode 100644 index 00000000..80b3e989 --- /dev/null +++ b/Nautilus/Documentation/tutorials/biomes.md @@ -0,0 +1,261 @@ +# Adding Custom Biomes +This guide provides some information on adding custom biomes. + +> [!NOTE] +> This page is under construction and may not be finished any time soon. However, any information currently provided should still be accurate. + +## SN1 Biome Settings: + +| Biome name | Sky name | Settings | +|--------------|-----------------|-------------------------------------------------------| +| safeShallows | SkySafeShallows | Absorption: (125.0, 20.0, 4.0)
Scattering: 1.2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.18
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 1
Ambient scale: 1.5
Temperature: 28
| +| safeShallows_WreckInterior | SkyExplorableWreck | Absorption: (125.0, 20.0, 4.0)
Scattering: 0.6
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.18
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 28
| +| kelpForest | SkyKelpForest | Absorption: (80.0, 25.0, 30.0)
Scattering: 1.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.16
Emissive: RGBA(0.934, 1.000, 0.000, 1.000)
Emissive scale: 0.01
Start distance: 25
Sunlight scale: 1
Ambient scale: 1.5
Temperature: 27
| +| kelpForest_WreckInterior | SkyExplorableWreck | Absorption: (80.0, 25.0, 30.0)
Scattering: 1.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.16
Emissive: RGBA(0.934, 1.000, 0.000, 1.000)
Emissive scale: 0.01
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 27
| +| grassyPlateaus | SkyGrassyPlateaus | Absorption: (10.0, 4.5, 3.0)
Scattering: 0.4
Scattering color: RGBA(0.761, 0.761, 0.761, 1.000)
Murkiness: 0.45
Emissive: RGBA(0.267, 0.498, 0.663, 1.000)
Emissive scale: 0.06
Start distance: 35
Sunlight scale: 1.75
Ambient scale: 2
Temperature: 26
| +| grassyPlateaus_WreckInterior | SkyExplorableWreck | Absorption: (20.0, 7.0, 3.0)
Scattering: 0.3
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 26
| +| mountains | SkyMountains | Absorption: (40.0, 15.0, 9.0)
Scattering: 0.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.12
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 1.4
Ambient scale: 1
Temperature: 24
| +| mushroomForest | SkyMushroomForest | Absorption: (100.0, 30.0, 20.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.05
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 1
Ambient scale: 2
Temperature: 24
| +| kooshZone | SkyKooshZone | Absorption: (30.0, 23.0, 12.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.14
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 24
| +| grandReef | SkyGrandReef | Absorption: (16.0, 12.0, 6.0)
Scattering: 2
Scattering color: RGBA(0.000, 1.000, 0.912, 1.000)
Murkiness: 0.25
Emissive: RGBA(0.000, 0.956, 1.000, 1.000)
Emissive scale: 0.03
Start distance: 40
Sunlight scale: 0.5
Ambient scale: 20
Temperature: 24
| +| deepGrandReef | SkyDeepGrandReef | Absorption: (6.0, 4.0, 3.0)
Scattering: 0.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.4
Emissive: RGBA(0.000, 0.959, 1.000, 1.000)
Emissive scale: 0.04
Start distance: 25
Sunlight scale: 0
Ambient scale: 100
Temperature: 24
| +| ilzChamber | SkyILZChamber | Absorption: (0.1, 2.0, 2.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 1
Emissive: RGBA(0.451, 0.455, 0.271, 1.000)
Emissive scale: 0.09
Start distance: 80
Sunlight scale: 0
Ambient scale: 0
Temperature: 60
| +| ilzCorridor | SkyILZChamber | Absorption: (3.0, 3.0, 1.5)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.376, 0.439, 0.447, 1.000)
Emissive scale: 0.035
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 60
| +| sparseReef | SkyMountains | Absorption: (10.0, 2.8, 2.8)
Scattering: 0.3
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.8
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 24
| +| floatingIslandsSurface | SkyMountains | Absorption: (100.0, 18.3, 3.5)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 1
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 24
| +| floatingIsland | SkyMountains | Absorption: (100.0, 18.3, 3.5)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 1
Emissive: RGBA(0.000, 0.216, 0.196, 1.000)
Emissive scale: 10
Start distance: 25
Sunlight scale: 3.2
Ambient scale: 1
Temperature: 34
| +| floatingIslandBelow | SkyMountains | Absorption: (3.0, 1.5, 1.0)
Scattering: 0.7
Scattering color: RGBA(0.000, 0.408, 0.573, 1.000)
Murkiness: 0.55
Emissive: RGBA(0.000, 0.490, 0.784, 1.000)
Emissive scale: 0.03
Start distance: 10
Sunlight scale: 0.03
Ambient scale: 0.2
Temperature: 24
| +| underwaterIslands | SkyMountains | Absorption: (25.0, 10.0, 5.0)
Scattering: 0.8
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.3
Emissive: RGBA(1.000, 0.279, 0.629, 1.000)
Emissive scale: 0.015
Start distance: 25
Sunlight scale: 1
Ambient scale: 5
Temperature: 24
| +| underwaterIslands_IslandCave | SkyMountains | Absorption: (25.0, 10.0, 5.0)
Scattering: 0.8
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.3
Emissive: RGBA(0.000, 0.250, 1.000, 1.000)
Emissive scale: 0.15
Start distance: 15
Sunlight scale: 0
Ambient scale: 5
Temperature: 24
| +| underwaterIslands_Cave | SkyMountains | Absorption: (25.0, 10.0, 5.0)
Scattering: 0.8
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.3
Emissive: RGBA(0.368, 0.000, 1.000, 1.000)
Emissive scale: 0.1
Start distance: 15
Sunlight scale: 0
Ambient scale: 5
Temperature: 24
| +| dunes | SkyDunes | Absorption: (20.0, 10.0, 6.0)
Scattering: 0.5
Scattering color: RGBA(0.341, 0.427, 0.447, 1.000)
Murkiness: 0.2
Emissive: RGBA(0.102, 0.133, 0.149, 1.000)
Emissive scale: 0.2
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 24
| +| bloodKelp | SkyBloodKelp | Absorption: (50.0, 8.0, 4.0)
Scattering: 0.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.4
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 24
| +| crashZone | SkyCrashZone | Absorption: (20.0, 20.0, 20.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.12
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 20
Sunlight scale: 1
Ambient scale: 1
Temperature: 24
| +| bloodKelp_Trench | SkyBloodKelp | Absorption: (35.0, 9.0, 5.0)
Scattering: 0.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.000, 1.000, 1.000, 1.000)
Emissive scale: 0.005
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 24
| +| bloodKelp_Cave | SkyBloodKelp | Absorption: (100.0, 33.0, 20.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.2
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 24
| +| safeShallows_Cave | SkySafeShallows_Caves | Absorption: (25.0, 15.0, 6.0)
Scattering: 0.1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.18
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0.005
Start distance: 25
Sunlight scale: 0.02
Ambient scale: 1
Temperature: 26
| +| safeShallows_HugeTube | SkySafeShallows | Absorption: (125.0, 20.0, 4.0)
Scattering: 0.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.18
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0.4
Ambient scale: 1
Temperature: 26
| +| safeShallows_CaveEntrance | SkySafeShallows | Absorption: (125.0, 20.0, 4.0)
Scattering: 1.2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.18
Emissive: RGBA(0.956, 0.984, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0.8
Ambient scale: 0.8
Temperature: 27
| +| jellyshroomCaves | SkyJellyshroomCaves | Absorption: (3.0, 3.0, 3.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.570, 0.339, 0.853, 1.000)
Emissive scale: 0.05
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| jellyshroomCaves_Entrance | SkyJellyshroomCaves | Absorption: (16.0, 6.0, 3.0)
Scattering: 0.3
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(1.000, 0.000, 0.931, 1.000)
Emissive scale: 0.01
Start distance: 25
Sunlight scale: 0.4
Ambient scale: 1
Temperature: 24
| +| kelpForest_Dense | SkyKelpForest | Absorption: (140.0, 32.0, 47.0)
Scattering: 1.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.18
Emissive: RGBA(0.934, 1.000, 0.000, 1.000)
Emissive scale: 0.02
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 27
| +| kelpForest_Cave | SkyKelpForest | Absorption: (140.0, 32.0, 47.0)
Scattering: 0.1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.2
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0.1
Ambient scale: 1
Temperature: 25
| +| kelpForest_CaveEntrance | SkyKelpForest | Absorption: (80.0, 25.0, 30.0)
Scattering: 0.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.18
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0.4
Ambient scale: 1
Temperature: 26
| +| bloodKelp_DeepTrench | SkyBloodKelp | Absorption: (35.0, 9.0, 5.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0.005
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 24
| +| grassyPlateaus_Cave | SkyGrassyPlateaus | Absorption: (5.0, 6.0, 3.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.8
Emissive: RGBA(0.208, 0.353, 1.000, 1.000)
Emissive scale: 0.03
Start distance: 20
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| kooshZone_cave_trans | SkyKooshZone | Absorption: (14.0, 10.0, 10.0)
Scattering: 0.3
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.4
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0.01
Start distance: 25
Sunlight scale: 0.3
Ambient scale: 1
Temperature: 24
| +| kooshZone_cave_dark | SkyKooshZone | Absorption: (14.0, 10.0, 10.0)
Scattering: 0.3
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.4
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0.01
Start distance: 25
Sunlight scale: 0
Ambient scale: 0.2
Temperature: 24
| +| Mountains_Cave | SkyMountainsCaves | Absorption: (40.0, 15.0, 9.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.1
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0.2
Temperature: 24
| +| Mountains_Island_Cave | SkyMountainsCaves | Absorption: (40.0, 15.0, 9.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.1
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0.2
Temperature: 24
| +| Mountains_IslandSurface_Cave | SkyMountains | Absorption: (40.0, 15.0, 9.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.1
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0.2
Temperature: 24
| +| Mountains_CaveEntrance | SkyMountains | Absorption: (40.0, 15.0, 9.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.2
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0.1
Ambient scale: 1
Temperature: 24
| +| Mountains_Island_CaveEntrance | SkyMountains | Absorption: (40.0, 15.0, 9.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.2
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0.1
Ambient scale: 1
Temperature: 24
| +| Mountains_IslandSurface_CaveEntrance | SkyMountains | Absorption: (40.0, 15.0, 9.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.2
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 1
Temperature: 24
| +| Dunes_Cave_light | SkyMountains | Absorption: (20.0, 10.0, 6.0)
Scattering: 0.1
Scattering color: RGBA(0.341, 0.427, 0.447, 1.000)
Murkiness: 0.2
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0.8
Ambient scale: 1
Temperature: 24
| +| Dunes_Cave_Dark | SkyMountains | Absorption: (20.0, 10.0, 6.0)
Scattering: 0.1
Scattering color: RGBA(0.341, 0.427, 0.447, 1.000)
Murkiness: 0.2
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0.5
Ambient scale: 0.8
Temperature: 24
| +| mushroomForest_cave_light | SkyMushroomForest | Absorption: (100.0, 30.0, 20.0)
Scattering: 0.8
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.1
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0.8
Ambient scale: 1
Temperature: 24
| +| mushroomForest_cave_dark | SkyMushroomForestCave | Absorption: (100.0, 30.0, 20.0)
Scattering: 0.1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.2
Emissive: RGBA(0.000, 0.824, 1.000, 1.000)
Emissive scale: 0.075
Start distance: 25
Sunlight scale: 0
Ambient scale: 1
Temperature: 24
| +| PrecursorCave_MushroomForest | SkyMushroomForestCave | Absorption: (0.2, 0.2, 0.2)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 1.5
Emissive: RGBA(0.000, 0.824, 1.000, 1.000)
Emissive scale: 0.002
Start distance: 10
Sunlight scale: 0
Ambient scale: 1
Temperature: 24
| +| GrandReef_Cave | SkyGrandReef | Absorption: (12.0, 10.0, 5.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.4
Emissive: RGBA(0.919, 0.324, 0.780, 1.000)
Emissive scale: 0.01
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 24
| +| CrashedShip_Interior | SkyExplodedShipInteriorPowerCorridor | Absorption: (7.0, 12.0, 20.0)
Scattering: 0.02
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 1
Emissive: RGBA(0.919, 0.460, 0.324, 1.000)
Emissive scale: 0.01
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashedShip_Interior_Power | SkyExplodedShipInteriorPowerRoom | Absorption: (50.0, 40.0, 30.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.662, 0.420, 0.365, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| crashZone_NoLoot | SkyMountains | Absorption: (100.0, 30.0, 20.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.1
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 24
| +| seaTreaderPath | SkyMountains | Absorption: (100.0, 33.0, 20.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.08
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 24
| +| seaTreaderPath_Cave_light | SkyMountains | Absorption: (100.0, 33.0, 20.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.1
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0.5
Ambient scale: 1
Temperature: 24
| +| seaTreaderPath_Cave_dark | SkyMountains | Absorption: (100.0, 33.0, 20.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.15
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 1
Temperature: 24
| +| KelpForest_DenseVine | SkyKelpForest | Absorption: (140.0, 32.0, 47.0)
Scattering: 1.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.18
Emissive: RGBA(0.934, 1.000, 0.000, 1.000)
Emissive scale: 0.02
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 27
| +| GrassyPlateaus_Tower | SkyGrassyPlateaus | Absorption: (10.0, 4.5, 3.0)
Scattering: 0.4
Scattering color: RGBA(0.761, 0.761, 0.761, 1.000)
Murkiness: 0.45
Emissive: RGBA(0.268, 0.499, 0.662, 1.000)
Emissive scale: 0.06
Start distance: 35
Sunlight scale: 1.75
Ambient scale: 2
Temperature: 24
| +| ILZCastleChamber | SkyILZChamber | Absorption: (0.5, 0.3, 1.0)
Scattering: 0.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 2
Emissive: RGBA(1.000, 0.329, 0.154, 1.000)
Emissive scale: 0.08
Start distance: 5
Sunlight scale: 0
Ambient scale: 0
Temperature: 60
| +| InactiveLavaZone | SkyMountains | Absorption: (25.0, 10.0, 5.0)
Scattering: 0.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.4
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 24
| +| bloodKelpTwo | SkyBloodKelpTwo | Absorption: (35.0, 7.0, 5.5)
Scattering: 0.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.15
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 24
| +| bloodKelpTwo_Cave | SkyBloodKelpTwo | Absorption: (35.0, 6.5, 5.0)
Scattering: 0.1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.2
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 0.01
Start distance: 25
Sunlight scale: 0
Ambient scale: 0.7
Temperature: 24
| +| LostRiver_BonesField | SkyBonesField | Absorption: (4.0, 2.0, 1.3)
Scattering: 0.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.4
Emissive: RGBA(0.000, 0.561, 0.375, 1.000)
Emissive scale: 0.2
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 34
| +| LostRiver_BonesField_Skeleton | SkyBonesField | Absorption: (4.0, 2.0, 1.3)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.000, 0.559, 0.374, 1.000)
Emissive scale: 0.25
Start distance: 15
Sunlight scale: 0
Ambient scale: 0
Temperature: 34
| +| LostRiver_BonesField_Cave | SkyBonesField | Absorption: (4.0, 2.0, 1.3)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 2
Emissive: RGBA(0.000, 0.559, 0.485, 1.000)
Emissive scale: 0.1
Start distance: 0
Sunlight scale: 0
Ambient scale: 0
Temperature: 34
| +| LostRiver_BonesField_Corridor | SkyBonesField_Corridor | Absorption: (3.0, 3.0, 2.0)
Scattering: 0.1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.000, 0.559, 0.374, 1.000)
Emissive scale: 0.15
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 30
| +| LostRiver_BonesField_Lake | SkyBonesField | Absorption: (10.0, 5.0, 2.5)
Scattering: 0.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.243, 1.000, 0.467, 1.000)
Emissive scale: 0.2
Start distance: 5
Sunlight scale: 0
Ambient scale: 1
Temperature: 39
| +| LostRiver_BonesField_LakePit | SkyBonesField | Absorption: (12.0, 6.0, 3.0)
Scattering: 0.3
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.243, 1.000, 0.467, 1.000)
Emissive scale: 0.2
Start distance: 0
Sunlight scale: 0
Ambient scale: 1
Temperature: 39
| +| LostRiver_BonesField_Corridor_Stream | SkyBonesField_Corridor | Absorption: (10.0, 5.0, 2.5)
Scattering: 0.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.243, 1.000, 0.467, 1.000)
Emissive scale: 0.3
Start distance: 0
Sunlight scale: 0
Ambient scale: 1
Temperature: 34
| +| ILZCastleTunnel | SkyILZChamber | Absorption: (1.0, 1.0, 1.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 2
Emissive: RGBA(1.000, 0.329, 0.154, 1.000)
Emissive scale: 0.08
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 60
| +| ALZChamber | SkyLavaLake | Absorption: (0.3, 1.0, 1.0)
Scattering: 0.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 1
Emissive: RGBA(1.000, 0.329, 0.154, 1.000)
Emissive scale: 0.08
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 80
| +| ALZFalls | SkyLavaLake | Absorption: (0.5, 1.0, 1.0)
Scattering: 0.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 1
Emissive: RGBA(1.000, 0.329, 0.154, 1.000)
Emissive scale: 0.08
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 70
| +| Prison_UpperRoom | SkyPrecursorPrisonAntechamber_NoLightmaps | Absorption: (0.0, 0.0, 0.0)
Scattering: 0.0001
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.001
Emissive: RGBA(0.601, 0.765, 0.444, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 34
| +| Prison_Aquarium | SkyPrecursorPrisonAquarium | Absorption: (8.0, 4.5, 4.5)
Scattering: 0.2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.3
Emissive: RGBA(0.145, 0.302, 0.255, 1.000)
Emissive scale: 0.4
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 21
| +| ilzLava | SkyILZChamber | Absorption: (0.3, 1.0, 1.0)
Scattering: 0.5
Scattering color: RGBA(0.000, 0.000, 0.000, 1.000)
Murkiness: 1
Emissive: RGBA(1.000, 0.329, 0.154, 1.000)
Emissive scale: 0.05
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 80
| +| LostRiver_TreeCove | SkyLostRiver_TreeCove | Absorption: (2.0, 1.0, 0.5)
Scattering: 0.1
Scattering color: RGBA(0.041, 0.125, 0.239, 1.000)
Murkiness: 1
Emissive: RGBA(0.062, 0.109, 0.173, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 34
| +| CrashedShip_Interior_ExoPipes | SkyExplodedShipInteriorPipesRoom | Absorption: (50.0, 40.0, 30.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.831, 0.507, 0.675, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashedShip_Interior_Exo | SkyExplodedShipInteriorExoRoom | Absorption: (70.0, 110.0, 70.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.778, 0.691, 1.000, 1.000)
Emissive scale: 0.05
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashedShip_Interior_Locker | SkyExplodedShipInteriorPowerCorridor | Absorption: (50.0, 40.0, 30.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.128, 0.173, 0.243, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashedShip_Interior_Seamoth | SkyExplodedShipInteriorPowerCorridor | Absorption: (70.0, 110.0, 70.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.449, 0.402, 0.413, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashedShip_Interior_Elevator | SkyExplodedShipInteriorPowerCorridor | Absorption: (50.0, 40.0, 30.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.500, 0.344, 0.309, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashedShip_Interior_Cargo | SkyExplodedShipInteriorPowerCorridor | Absorption: (50.0, 40.0, 30.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 1.5
Emissive: RGBA(0.394, 0.154, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashedShip_Interior_Entrance_01_01 | SkyExplodedShipInteriorEntrance_03 | Absorption: (50.0, 40.0, 30.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.128, 0.173, 0.243, 1.000)
Emissive scale: 0.5
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashedShip_Interior_Entrance_01_02 | SkyExplodedShipInteriorEntrance_03 | Absorption: (50.0, 40.0, 30.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.394, 0.154, 1.000, 1.000)
Emissive scale: 0.5
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashedShip_Interior_Entrance_01_03 | SkyExplodedShipInteriorEntrance_03 | Absorption: (50.0, 40.0, 30.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.394, 0.154, 1.000, 1.000)
Emissive scale: 0.1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashedShip_Interior_Entrance_02_01 | SkyExplodedShipInteriorEntrance_03 | Absorption: (50.0, 40.0, 30.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.394, 0.154, 1.000, 1.000)
Emissive scale: 0.1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashedShip_Interior_Entrance_02_02 | SkyExplodedShipInteriorEntrance_03 | Absorption: (70.0, 110.0, 70.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 1.5
Emissive: RGBA(0.394, 0.154, 1.000, 1.000)
Emissive scale: 0.1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashedShip_Interior_Entrance_03 | SkyExplodedShipInteriorEntrance_03 | Absorption: (50.0, 40.0, 30.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.500, 0.344, 0.309, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashedShip_Interior_PowerCorridor | SkyExplodedShipInteriorPowerCorridor | Absorption: (50.0, 40.0, 30.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.500, 0.344, 0.309, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashedShip_Interior_LockerCorridor | SkyExplodedShipInteriorPowerCorridor | Absorption: (50.0, 40.0, 30.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.500, 0.344, 0.309, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashedShip_Interior_SeamothRoom | SkyExplodedShipInteriorSeamothRoom_02 | Absorption: (50.0, 40.0, 30.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.500, 0.344, 0.309, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashedShip_Interior_LivingArea | SkyExplodedShipInteriorExoRoom | Absorption: (80.0, 110.0, 70.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.394, 0.154, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashedShip_Interior_THallway | SkyExplodedShipInteriorPowerCorridor | Absorption: (50.0, 40.0, 30.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.394, 0.154, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashedShip_Interior_THallwayLower | SkyExplodedShipInteriorPowerCorridor | Absorption: (50.0, 40.0, 30.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.394, 0.154, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| LavaLakes | SkyLavaLake | Absorption: (0.6, 0.3, 1.0)
Scattering: 0.75
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.55
Emissive: RGBA(1.000, 0.329, 0.154, 1.000)
Emissive scale: 0.05
Start distance: 65
Sunlight scale: 0
Ambient scale: 0
Temperature: 80
| +| LavaFalls | SkyLavaLake | Absorption: (0.5, 1.0, 1.0)
Scattering: 0.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 1
Emissive: RGBA(1.000, 0.329, 0.154, 1.000)
Emissive scale: 0.08
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 70
| +| LavaLakes_LavaPool | SkyLavaLake | Absorption: (0.5, 0.6, 1.0)
Scattering: 0.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 1
Emissive: RGBA(1.000, 0.471, 0.157, 1.000)
Emissive scale: 0.15
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 80
| +| LavaPit | SkyILZChamber | Absorption: (3.0, 2.0, 1.5)
Scattering: 0.1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.4
Emissive: RGBA(0.424, 0.588, 0.651, 1.000)
Emissive scale: 0.03
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 60
| +| Precursor_Gun_OuterRooms | SkyPrecursorInterior_NoLightmaps | Absorption: (0.0, 0.0, 0.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.01
Emissive: RGBA(0.824, 0.922, 0.828, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| LostRiver_TreeCove_Water | SkyLostRiver_TreeCove | Absorption: (4.0, 4.0, 5.0)
Scattering: 1
Scattering color: RGBA(0.000, 0.226, 0.275, 1.000)
Murkiness: 0.4
Emissive: RGBA(0.000, 0.550, 0.667, 1.000)
Emissive scale: 0.8
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 39
| +| Precursor_Gun_MoonPoolWater | SkyPrecursorInterior_NoLightmaps | Absorption: (12.0, 10.0, 12.0)
Scattering: 0.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.000, 0.560, 0.603, 1.000)
Emissive scale: 0.2
Start distance: 25
Sunlight scale: 0.5
Ambient scale: 1
Temperature: 24
| +| Precursor_Gun_InnerRooms | SkyPrecursorInterior_NoLightmaps | Absorption: (0.0, 0.0, 0.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.01
Emissive: RGBA(0.000, 0.560, 0.603, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| Precursor_Gun_ControlRoom | SkyPrecursorInterior_NoLightmaps | Absorption: (0.0, 0.0, 0.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.01
Emissive: RGBA(0.000, 0.560, 0.603, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| Precursor_LostRiverBase | SkyPrecursorInterior_LostRiverBase_NoLightmaps | Absorption: (4.0, 2.0, 1.3)
Scattering: 0.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.000, 0.561, 0.378, 1.000)
Emissive scale: 0.05
Start distance: 5
Sunlight scale: 0
Ambient scale: 0
Temperature: 14
| +| Precursor_LavaCastleBase | SkyPrecursorInterior_NoLightmaps | Absorption: (0.0, 0.0, 0.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.01
Emissive: RGBA(0.000, 0.560, 0.603, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 34
| +| PrecursorThermalRoom | SkyPrecursorInterior_NoLightmaps | Absorption: (0.0, 0.0, 0.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.01
Emissive: RGBA(0.000, 0.560, 0.603, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 34
| +| LostRiver_TreeCove_Tree | SkyLostRiver_TreeCove | Absorption: (2.0, 1.0, 0.5)
Scattering: 0.1
Scattering color: RGBA(0.041, 0.125, 0.239, 1.000)
Murkiness: 1
Emissive: RGBA(0.062, 0.109, 0.173, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 34
| +| underwaterIslands_Geyser | SkyMountains | Absorption: (25.0, 10.0, 5.0)
Scattering: 0.8
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.3
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 1
Ambient scale: 5
Temperature: 60
| +| JellyshroomCaves_Geyser | SkyJellyshroomCaves | Absorption: (5.0, 4.0, 2.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.431, 0.392, 0.784, 1.000)
Emissive scale: 0.035
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 60
| +| LostRiver_GhostTree | SkyLostRiver | Absorption: (10.0, 8.0, 12.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.25
Emissive: RGBA(0.000, 0.216, 0.196, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 30
| +| ilzChamber_Dragon | SkyILZChamber | Absorption: (0.1, 2.0, 2.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 1
Emissive: RGBA(0.451, 0.455, 0.271, 1.000)
Emissive scale: 0.09
Start distance: 80
Sunlight scale: 0
Ambient scale: 0
Temperature: 60
| +| LostRiver_Junction | SkyLostRiver_Junction | Absorption: (4.0, 2.0, 1.3)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.000, 0.561, 0.378, 1.000)
Emissive scale: 0.05
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 34
| +| LostRiver_GhostTree_Lower | SkyLostRiver | Absorption: (10.0, 8.0, 12.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.28
Emissive: RGBA(0.000, 0.196, 0.176, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 34
| +| LostRiver_GhostTree_Skeleton | SkyLostRiver | Absorption: (10.0, 8.0, 12.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.25
Emissive: RGBA(0.000, 0.216, 0.196, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 30
| +| FloatingIslandCaveTeleporter | SkyMountains | Absorption: (10.0, 8.0, 12.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 1
Emissive: RGBA(0.353, 0.627, 0.706, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| LostRiver_Junction_Water | SkyLostRiver_Junction | Absorption: (10.0, 5.0, 2.5)
Scattering: 0.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.243, 1.000, 0.462, 1.000)
Emissive scale: 0.3
Start distance: 5
Sunlight scale: 0
Ambient scale: 1
Temperature: 39
| +| mountains_teleporter | SkyMountainsCaves | Absorption: (40.0, 15.0, 9.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.2
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0.3
Ambient scale: 0.2
Temperature: 24
| +| sparseReef_Cave | SkyMountains | Absorption: (5.0, 4.0, 3.0)
Scattering: 0.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 1
Emissive: RGBA(0.039, 0.075, 0.208, 1.000)
Emissive scale: 0.1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0.5
Temperature: 24
| +| sparseReef_Deep | SkyMountains | Absorption: (10.0, 2.8, 2.8)
Scattering: 0.3
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.8
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0.5
Ambient scale: 0.5
Temperature: 24
| +| sparseReef_Spike | SkyMountains | Absorption: (10.0, 2.8, 2.8)
Scattering: 0.3
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.8
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 24
| +| sparseReef_Wreck | SkyExplorableWreck | Absorption: (5.0, 4.0, 3.0)
Scattering: 0.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 1
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 1
Temperature: 24
| +| precursorCache | SkyPrecursorInterior | Absorption: (10.0, 1.0, 2.0)
Scattering: 0.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 3
Emissive: RGBA(0.075, 0.310, 0.231, 1.000)
Emissive scale: 0.2
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| LostRiver_SkeletonCave | SkyBonesField | Absorption: (10.0, 4.0, 3.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.061, 0.243, 0.180, 1.000)
Emissive scale: 0.5
Start distance: 15
Sunlight scale: 0
Ambient scale: 0
Temperature: 30
| +| LostRiver_SkeletonCave_Skeleton | SkyBonesField | Absorption: (4.0, 2.0, 1.3)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 3
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 0
Start distance: 15
Sunlight scale: 0
Ambient scale: 0
Temperature: 30
| +| LostRiver_Canyon | SkyBonesField | Absorption: (10.0, 3.0, 3.0)
Scattering: 0.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.059, 0.243, 0.180, 1.000)
Emissive scale: 0.5
Start distance: 15
Sunlight scale: 0
Ambient scale: 0
Temperature: 30
| +| CragField | SkyMountains | Absorption: (100.0, 33.0, 20.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.1
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 24
| +| PrecursorCave_Cragfield | SkyMountains | Absorption: (100.0, 33.0, 20.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.1
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| Prison_Aquarium_Upper | SkyPrecursorPrisonAquarium | Absorption: (10.0, 4.5, 5.0)
Scattering: 0.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.6
Emissive: RGBA(0.145, 0.302, 0.255, 1.000)
Emissive scale: 0.4
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 21
| +| Prison_Aquarium_Mid | SkyPrecursorPrisonAquarium | Absorption: (10.0, 4.5, 4.5)
Scattering: 0.3
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.4
Emissive: RGBA(0.145, 0.302, 0.255, 1.000)
Emissive scale: 0.25
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 21
| +| Prison_Aquarium_Cave | SkyMountains | Absorption: (15.0, 10.0, 8.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.8
Emissive: RGBA(0.000, 0.204, 0.220, 1.000)
Emissive scale: 1
Start distance: 5
Sunlight scale: 0
Ambient scale: 0
Temperature: 21
| +| PrecursorCave_GhostTree | SkyMountains | Absorption: (20.0, 15.0, 20.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.15
Emissive: RGBA(0.475, 0.838, 0.542, 1.000)
Emissive scale: 0.02
Start distance: 5
Sunlight scale: 0
Ambient scale: 0
Temperature: 21
| +| PrecursorCave_KooshZone | SkyMountains | Absorption: (20.0, 15.0, 20.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.15
Emissive: RGBA(0.375, 0.375, 0.400, 1.000)
Emissive scale: 0.12
Start distance: 5
Sunlight scale: 0
Ambient scale: 0
Temperature: 21
| +| Prison_Antechamber | SkyPrecursorPrisonAntechamber | Absorption: (0.0, 0.0, 0.0)
Scattering: 0.0001
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.001
Emissive: RGBA(0.600, 0.765, 0.443, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 34
| +| Prison_Moonpool | SkyPrecursorPrisonMoonpool | Absorption: (0.0, 0.0, 0.0)
Scattering: 0.0001
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.001
Emissive: RGBA(0.600, 0.765, 0.443, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 34
| +| kooshZone_wreck | SkyExplorableWreck | Absorption: (30.0, 23.0, 12.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.14
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashZone_Mesa | SkyCrashZone | Absorption: (50.0, 20.0, 20.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.15
Emissive: RGBA(0.004, 0.647, 0.129, 1.000)
Emissive scale: 0.03
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 24
| +| Dunes_wreck | SkyExplorableWreck | Absorption: (20.0, 10.0, 6.0)
Scattering: 0.5
Scattering color: RGBA(0.341, 0.427, 0.447, 1.000)
Murkiness: 0.2
Emissive: RGBA(0.102, 0.133, 0.149, 1.000)
Emissive scale: 0.2
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| LostRiver_Corridor | SkyLostRiver_Junction | Absorption: (4.0, 2.0, 1.3)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.000, 0.561, 0.376, 1.000)
Emissive scale: 0.05
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 30
| +| LostRiver_Corridor_ThermalVents | SkyLostRiver_Junction | Absorption: (4.0, 2.0, 1.3)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.000, 0.561, 0.376, 1.000)
Emissive scale: 0.05
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 30
| +| underwaterIslands_wreck | SkyExplorableWreck | Absorption: (25.0, 10.0, 5.0)
Scattering: 0.8
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.3
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| mountains_wreckinterior | SkyExplorableWreck | Absorption: (40.0, 15.0, 9.0)
Scattering: 0.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.12
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| bloodKelp_wreck | SkyExplorableWreck | Absorption: (50.0, 8.0, 4.0)
Scattering: 0.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.4
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| seaTreaderPath_wreck | SkyExplorableWreck | Absorption: (100.0, 33.0, 20.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.8
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| mushroomForest_wreck | SkyExplorableWreck | Absorption: (100.0, 30.0, 20.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.05
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| grandReef_wreck | SkyExplorableWreck | Absorption: (16.0, 12.0, 6.0)
Scattering: 2
Scattering color: RGBA(0.000, 1.000, 0.910, 1.000)
Murkiness: 0.25
Emissive: RGBA(0.000, 0.957, 1.000, 1.000)
Emissive scale: 0.03
Start distance: 40
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| CrashZone_Trench | SkyCrashZone | Absorption: (17.0, 20.0, 20.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.2
Emissive: RGBA(1.000, 1.000, 1.000, 1.000)
Emissive scale: 0
Start distance: 5
Sunlight scale: 0.75
Ambient scale: 1
Temperature: 24
| + +## BZ Biome Settings: + +| Biome name | Sky name | Settings | +|--------------|-----------------|-------------------------------------------------------| +| arctic | SkyArcticSurface | Absorption: (125.0, 20.0, 4.0)
Scattering: 1.2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.18
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 1
Ambient scale: 1.5
Temperature: 0
| +| sparseArctic | SkyArcticSurface | Absorption: (150.0, 15.0, 3.0)
Scattering: 0.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 1
Start distance: 35
Sunlight scale: 1.2
Ambient scale: 1.5
Temperature: 0
| +| glacialBay | SkyArcticSurface | Absorption: (35.0, 5.0, 3.0)
Scattering: 1
Scattering color: RGBA(0.016, 0.840, 0.758, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.495, 0.991, 0.792, 1.000)
Emissive scale: 0.05
Start distance: 35
Sunlight scale: 1
Ambient scale: 1
Temperature: 0
| +| arcticKelp | SkyKelpForest | Absorption: (5.0, 1.5, 2.0)
Scattering: 0.25
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 3
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 1
Start distance: 35
Sunlight scale: 1
Ambient scale: 1.25
Temperature: 20
| +| twistyBridges | SkyTwistyBridges | Absorption: (35.0, 5.0, 3.0)
Scattering: 1
Scattering color: RGBA(0.000, 0.534, 0.440, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.000, 0.868, 1.000, 1.000)
Emissive scale: 0.02
Start distance: 30
Sunlight scale: 1.1
Ambient scale: 0.5
Temperature: 4
| +| twistyBridges_Shallow | SkyTwistyBridges_Shallow | Absorption: (25.0, 9.0, 3.0)
Scattering: 0.385
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.4
Emissive: RGBA(0.239, 1.000, 0.886, 1.000)
Emissive scale: 0.03
Start distance: 20
Sunlight scale: 1.2
Ambient scale: 0.6
Temperature: 6
| +| twistyBridges_OuterCave | SkyTwistyBridges_ShallowCave | Absorption: (35.0, 5.0, 3.0)
Scattering: 1
Scattering color: RGBA(0.000, 0.534, 0.440, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.000, 0.851, 1.000, 1.000)
Emissive scale: 0.04
Start distance: 15
Sunlight scale: 0.4
Ambient scale: 1.1
Temperature: 6
| +| twistyBridges_Cave | SkyTwistyBridges_ShallowCave | Absorption: (35.0, 5.0, 3.0)
Scattering: 1
Scattering color: RGBA(0.000, 0.534, 0.440, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.000, 0.851, 1.000, 1.000)
Emissive scale: 0.04
Start distance: 15
Sunlight scale: 0
Ambient scale: 1.1
Temperature: 6
| +| twistyBridges_InnerCave | SkyTwistyBridges_ShallowCave | Absorption: (35.0, 5.0, 3.0)
Scattering: 1
Scattering color: RGBA(0.000, 0.534, 0.440, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.000, 0.851, 1.000, 1.000)
Emissive scale: 0.02
Start distance: 15
Sunlight scale: 0
Ambient scale: 1.1
Temperature: 6
| +| twistyBridges_Cave_Sanctuary | SkyTwistyBridges_ShallowCave | Absorption: (35.0, 5.0, 3.0)
Scattering: 1
Scattering color: RGBA(0.000, 0.534, 0.440, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.000, 0.851, 1.000, 1.000)
Emissive scale: 0.02
Start distance: 15
Sunlight scale: 0
Ambient scale: 1.1
Temperature: 6
| +| lilyPads | SkyLilyPads | Absorption: (20.0, 5.0, 6.0)
Scattering: 0.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.45
Emissive: RGBA(0.180, 0.604, 0.404, 1.000)
Emissive scale: 0.05
Start distance: 20
Sunlight scale: 1
Ambient scale: 1.25
Temperature: 20
| +| lilyPads_Islands | SkyLilyPads | Absorption: (20.0, 5.0, 6.0)
Scattering: 0.6
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.45
Emissive: RGBA(0.180, 0.604, 0.404, 1.000)
Emissive scale: 0.05
Start distance: 20
Sunlight scale: 1
Ambient scale: 1.25
Temperature: 20
| +| lilyPads_Islands_Cave | SkyLilyPads | Absorption: (20.0, 5.0, 6.0)
Scattering: 0.3
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.6
Emissive: RGBA(0.180, 0.604, 0.285, 1.000)
Emissive scale: 0.4
Start distance: 10
Sunlight scale: 0
Ambient scale: 1
Temperature: 20
| +| lilyPads_MegaIsland_CaveInterior | SkyLilyPads_MegaIsland_CaveInterior | Absorption: (20.0, 5.0, 6.0)
Scattering: 0.2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.45
Emissive: RGBA(0.180, 0.604, 0.404, 1.000)
Emissive scale: 0.05
Start distance: 20
Sunlight scale: 0.5
Ambient scale: 1
Temperature: 20
| +| lilyPads_MegaIsland_CaveCorridor | SkyLilyPads_MegaIsland_CaveCorridor | Absorption: (20.0, 5.0, 6.0)
Scattering: 0.2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.45
Emissive: RGBA(0.180, 0.604, 0.404, 1.000)
Emissive scale: 0.02
Start distance: 20
Sunlight scale: 0.25
Ambient scale: 1
Temperature: 20
| +| lilyPads_ShipWreck | SkyLilyPads | Absorption: (20.0, 5.0, 6.0)
Scattering: 0.6
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.35
Emissive: RGBA(0.180, 0.604, 0.404, 1.000)
Emissive scale: 0.013
Start distance: 25
Sunlight scale: 1
Ambient scale: 1.25
Temperature: 20
| +| thermalSpires | SkyThermalSpires | Absorption: (30.0, 12.0, 8.0)
Scattering: 0.3
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.063, 0.137, 0.196, 1.000)
Emissive scale: 0.5
Start distance: 25
Sunlight scale: 1
Ambient scale: 1.5
Temperature: 25
| +| thermalSpires_cave | SkyThermalSpiresCave | Absorption: (5.0, 2.0, 1.0)
Scattering: 0.3
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.75
Emissive: RGBA(0.519, 0.432, 0.277, 1.000)
Emissive scale: 0.2
Start distance: 15
Sunlight scale: 0
Ambient scale: 0.8
Temperature: 35
| +| thermalSpiresDeep | SkyThermalSpiresCave | Absorption: (30.0, 12.0, 8.0)
Scattering: 0.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.75
Emissive: RGBA(0.063, 0.137, 0.196, 1.000)
Emissive scale: 0.5
Start distance: 25
Sunlight scale: 1
Ambient scale: 0.8
Temperature: 45
| +| purpleVents | SkyPurpleVents | Absorption: (8.0, 7.0, 7.0)
Scattering: 0.35
Scattering color: RGBA(0.404, 0.616, 0.800, 1.000)
Murkiness: 0.65
Emissive: RGBA(0.000, 0.165, 0.216, 1.000)
Emissive scale: 5
Start distance: 24
Sunlight scale: 1
Ambient scale: 1.5
Temperature: 20
| +| purpleVents_ShipWreck | SkyPurpleVents | Absorption: (8.0, 7.0, 7.0)
Scattering: 0.5
Scattering color: RGBA(0.404, 0.616, 0.800, 1.000)
Murkiness: 0.65
Emissive: RGBA(0.000, 0.165, 0.216, 1.000)
Emissive scale: 5
Start distance: 24
Sunlight scale: 1
Ambient scale: 1.5
Temperature: 40
| +| purpleVents_Deep | SkyDeepPurpleVents | Absorption: (8.0, 7.0, 7.0)
Scattering: 0.35
Scattering color: RGBA(0.404, 0.616, 0.800, 1.000)
Murkiness: 0.65
Emissive: RGBA(0.000, 0.165, 0.216, 1.000)
Emissive scale: 5
Start distance: 24
Sunlight scale: 0
Ambient scale: 1.5
Temperature: 40
| +| purpleVents_Crevice | SkyDeepPurpleVents | Absorption: (8.0, 7.0, 7.0)
Scattering: 0.35
Scattering color: RGBA(0.404, 0.616, 0.800, 1.000)
Murkiness: 0.65
Emissive: RGBA(0.000, 0.165, 0.216, 1.000)
Emissive scale: 5
Start distance: 24
Sunlight scale: 0.5
Ambient scale: 1.5
Temperature: 40
| +| crystalCave | SkyTwistyBridges_Deep | Absorption: (5.0, 5.0, 5.5)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.403, 0.528, 0.981, 1.000)
Emissive scale: 0.2
Start distance: 20
Sunlight scale: 0
Ambient scale: 0
Temperature: 30
| +| crystalCave_Fissure | SkyTwistyBridges_Deep | Absorption: (6.0, 3.5, 6.5)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.4
Emissive: RGBA(0.508, 0.584, 0.282, 1.000)
Emissive scale: 0.25
Start distance: 5
Sunlight scale: 0
Ambient scale: 0
Temperature: 50
| +| crystalCave_Vent | SkyTwistyBridges_Deep | Absorption: (6.0, 3.5, 6.5)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.4
Emissive: RGBA(0.508, 0.584, 0.282, 1.000)
Emissive scale: 0.25
Start distance: 5
Sunlight scale: 0
Ambient scale: 0
Temperature: 80
| +| fabricatorcaverns | SkyTwistyBridges_Deep | Absorption: (4.0, 3.0, 6.0)
Scattering: 0.1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.6
Emissive: RGBA(0.118, 0.510, 0.659, 1.000)
Emissive scale: 0.2
Start distance: 30
Sunlight scale: 0
Ambient scale: 0
Temperature: 6
| +| deepArctic | SkyTwistyBridges_Deep | Absorption: (125.0, 20.0, 4.0)
Scattering: 1.2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.18
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 1
Ambient scale: 1.5
Temperature: -2
| +| kelpForest | SkyKelpForest | Absorption: (7.0, 4.5, 4.5)
Scattering: 1.2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.2
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 5
| +| lilyPads_Deep | SkyDeepLily | Absorption: (5.0, 5.5, 6.5)
Scattering: 0.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(1.000, 0.906, 0.973, 1.000)
Emissive scale: 0.12
Start distance: 18
Sunlight scale: 0
Ambient scale: 1
Temperature: 1
| +| lilyPads_Deep_Cache | SkyDeepLily | Absorption: (0.0, 0.0, 0.0)
Scattering: 0.25
Scattering color: RGBA(0.000, 0.533, 0.439, 1.000)
Murkiness: 1
Emissive: RGBA(0.800, 0.784, 1.000, 1.000)
Emissive scale: 0.01
Start distance: 0
Sunlight scale: 0
Ambient scale: 1.1
Temperature: 6
| +| lilyPads_Deep_GiantFlower | SkyDeepLily | Absorption: (10.0, 11.0, 15.0)
Scattering: 0.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.23
Emissive: RGBA(0.027, 0.152, 0.220, 1.000)
Emissive scale: 1
Start distance: 0
Sunlight scale: 0
Ambient scale: 2
Temperature: 1
| +| twistyBridges_Deep | SkyTwistyBridges_Deep | Absorption: (12.0, 12.0, 7.0)
Scattering: 0.25
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.45
Emissive: RGBA(0.533, 0.463, 0.867, 1.000)
Emissive scale: 0.13
Start distance: 12
Sunlight scale: 0
Ambient scale: 0.8
Temperature: 30
| +| twistyBridges_Deep_thermal | SkyTwistyBridges_Deep | Absorption: (12.0, 12.0, 7.0)
Scattering: 0.25
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.533, 0.463, 0.867, 1.000)
Emissive scale: 0.13
Start distance: 12
Sunlight scale: 0
Ambient scale: 0.8
Temperature: 55
| +| introIceCave_Entrance | SkyintroIceCave | Absorption: (12.0, 12.0, 7.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.533, 0.463, 0.867, 1.000)
Emissive scale: 0.13
Start distance: 12
Sunlight scale: 0.1
Ambient scale: 0.8
Temperature: 1
| +| introIceCave | SkyintroIceCave | Absorption: (12.0, 12.0, 7.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.533, 0.463, 0.867, 1.000)
Emissive scale: 0.13
Start distance: 12
Sunlight scale: 0
Ambient scale: 0.8
Temperature: 1
| +| RocketAreaIceCave | SkyintroIceCave | Absorption: (12.0, 12.0, 7.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.089, 0.771, 0.868, 1.000)
Emissive scale: 0.13
Start distance: 12
Sunlight scale: 0
Ambient scale: 0.8
Temperature: 1
| +| RocketAreaIceCave_Entrance | SkyintroIceCave | Absorption: (12.0, 12.0, 7.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.485, 0.820, 0.868, 1.000)
Emissive scale: 0.13
Start distance: 12
Sunlight scale: 0.1
Ambient scale: 0.8
Temperature: 1
| +| RocketAreaRockCave | SkyKelpCave | Absorption: (12.0, 12.0, 7.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.838, 0.639, 0.210, 1.000)
Emissive scale: 0.13
Start distance: 12
Sunlight scale: 0
Ambient scale: 0.8
Temperature: 1
| +| RocketAreaRockCave_Entrance | SkyKelpCave | Absorption: (12.0, 12.0, 7.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.860, 0.772, 0.582, 1.000)
Emissive scale: 0.13
Start distance: 12
Sunlight scale: 0.1
Ambient scale: 0.8
Temperature: 1
| +| startZone | SkyArcticSurface | Absorption: (150.0, 15.0, 3.0)
Scattering: 0.2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 0
Start distance: 35
Sunlight scale: 1.2
Ambient scale: 1.5
Temperature: 0
| +| ArcticKelp_CaveInner | SkyKelpCave | Absorption: (30.0, 25.0, 20.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.15
Emissive: RGBA(0.353, 0.431, 0.157, 1.000)
Emissive scale: 1
Start distance: 8
Sunlight scale: 0
Ambient scale: 0
Temperature: 30
| +| ArcticKelp_CaveOuter | SkyKelpCave | Absorption: (30.0, 25.0, 20.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.15
Emissive: RGBA(0.353, 0.431, 0.157, 1.000)
Emissive scale: 1
Start distance: 8
Sunlight scale: 0
Ambient scale: 0
Temperature: 24
| +| startZone_Cave | SkyTwistyBridges | Absorption: (35.0, 5.0, 2.0)
Scattering: 0.5
Scattering color: RGBA(0.000, 0.533, 0.439, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.000, 0.851, 1.000, 1.000)
Emissive scale: 0.05
Start distance: 15
Sunlight scale: 0
Ambient scale: 1.1
Temperature: 6
| +| startZone_Cave_Entrance | SkyTwistyBridges | Absorption: (35.0, 5.0, 2.0)
Scattering: 0.5
Scattering color: RGBA(0.000, 0.533, 0.439, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.000, 0.851, 1.000, 1.000)
Emissive scale: 0.07
Start distance: 15
Sunlight scale: 0.5
Ambient scale: 1.1
Temperature: 6
| +| Precursor_Sanctuary | SkyPrecursorSanctuaryCave | Absorption: (35.0, 5.0, 2.0)
Scattering: 1
Scattering color: RGBA(0.000, 0.533, 0.439, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.000, 0.851, 1.000, 1.000)
Emissive scale: 0.07
Start distance: 15
Sunlight scale: 0
Ambient scale: 1.1
Temperature: 6
| +| Precursor_Sanctuary_Cave | SkyPrecursorSanctuaryCave | Absorption: (35.0, 5.0, 2.0)
Scattering: 1
Scattering color: RGBA(0.000, 0.533, 0.439, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.000, 0.851, 1.000, 1.000)
Emissive scale: 0.02
Start distance: 15
Sunlight scale: 0
Ambient scale: 1.1
Temperature: 6
| +| treespires | SkyTreeSpires | Absorption: (5.0, 4.0, 2.0)
Scattering: 0.3
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.75
Emissive: RGBA(0.757, 0.447, 1.000, 1.000)
Emissive scale: 0.1
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 30
| +| treespires_bigtree | SkyTreeSpires | Absorption: (5.0, 4.0, 2.0)
Scattering: 0.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.75
Emissive: RGBA(0.757, 0.447, 1.000, 1.000)
Emissive scale: 0.1
Start distance: 25
Sunlight scale: 1
Ambient scale: 1
Temperature: 25
| +| treespires_bigfissure | SkyTreeSpires | Absorption: (6.0, 10.0, 3.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.3
Emissive: RGBA(0.757, 0.447, 1.000, 1.000)
Emissive scale: 0.05
Start distance: 25
Sunlight scale: 0
Ambient scale: 1
Temperature: 50
| +| treespires_smallfissure | SkyTreeSpires | Absorption: (8.0, 10.0, 3.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.3
Emissive: RGBA(0.000, 1.000, 0.975, 1.000)
Emissive scale: 0.1
Start distance: 25
Sunlight scale: 1.5
Ambient scale: 1
Temperature: 40
| +| GlacialBasin_Bunker | SkyBaseInterior | Absorption: (255.0, 255.0, 255.0)
Scattering: 0
Scattering color: RGBA(0.000, 0.000, 0.000, 1.000)
Murkiness: 0.48
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 0
Start distance: 15
Sunlight scale: 0
Ambient scale: 0
Temperature: 3
| +| GlacialBasin_GlacialCave | SkyGlacialCavesIce | Absorption: (255.0, 255.0, 255.0)
Scattering: 0
Scattering color: RGBA(0.000, 0.000, 0.000, 1.000)
Murkiness: 0.48
Emissive: RGBA(0.724, 0.908, 0.953, 1.000)
Emissive scale: 0
Start distance: 15
Sunlight scale: 0
Ambient scale: 0
Temperature: 3
| +| GlacialBasin_CreatureCave | SkyintroIceCave | Absorption: (12.0, 12.0, 7.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.533, 0.463, 0.867, 1.000)
Emissive scale: 0.13
Start distance: 12
Sunlight scale: 0
Ambient scale: 0.8
Temperature: 3
| +| GlacialBasin_DarkCave | SkyPrecursorInterior_Dark | Absorption: (255.0, 255.0, 255.0)
Scattering: 0
Scattering color: RGBA(0.000, 0.000, 0.000, 1.000)
Murkiness: 3
Emissive: RGBA(0.000, 0.000, 0.000, 1.000)
Emissive scale: 0
Start distance: 0
Sunlight scale: 0
Ambient scale: 0
Temperature: 3
| +| GlacialBasin_HoverBikeBase | SkyintroIceCave | Absorption: (12.0, 12.0, 7.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.533, 0.463, 0.867, 1.000)
Emissive scale: 0.13
Start distance: 12
Sunlight scale: 0
Ambient scale: 0.4
Temperature: 3
| +| GlacialBasin_BlueIceCave | SkyintroIceCave | Absorption: (12.0, 6.0, 6.0)
Scattering: 1
Scattering color: RGBA(0.108, 0.608, 0.915, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.724, 0.908, 0.953, 1.000)
Emissive scale: 0.5
Start distance: 12
Sunlight scale: 0
Ambient scale: 0.8
Temperature: 3
| +| GlacialBasin_Overhang | SkyGlacialBasin | Absorption: (128.0, 32.0, 32.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.725, 0.906, 0.953, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0.5
Ambient scale: 0
Temperature: 3
| +| GlacialBasin_IceLakeSurface | SkyTwistyBridges_Shallow | Absorption: (25.0, 9.0, 3.0)
Scattering: 0.2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.8
Emissive: RGBA(0.529, 0.000, 1.000, 1.000)
Emissive scale: 0.01
Start distance: 20
Sunlight scale: 1.2
Ambient scale: 0.6
Temperature: 3
| +| GlacialBasin_TemperateCave | SkyintroIceCave | Absorption: (12.0, 6.0, 6.0)
Scattering: 0
Scattering color: RGBA(0.000, 0.579, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.707, 0.802, 0.723, 1.000)
Emissive scale: 2.45
Start distance: 5
Sunlight scale: 0
Ambient scale: 0.8
Temperature: 3
| +| glacialBasin_Underwater | SkyTreeSpires | Absorption: (20.0, 10.0, 4.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.3
Emissive: RGBA(0.141, 0.204, 0.388, 1.000)
Emissive scale: 0.05
Start distance: 25
Sunlight scale: 0
Ambient scale: 0.2
Temperature: 0
| +| glacialBasin | SkyGlacialBasin | Absorption: (25.0, 25.0, 3.0)
Scattering: 0.06
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.724, 0.908, 0.953, 1.000)
Emissive scale: 0.05
Start distance: 35
Sunlight scale: 1
Ambient scale: 1.5
Temperature: 0
| +| MiningSite | SkyMiningSite | Absorption: (25.0, 15.0, 20.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.953, 0.858, 0.725, 1.000)
Emissive scale: 0.1
Start distance: 35
Sunlight scale: 0
Ambient scale: 1.5
Temperature: 0
| +| wreck | SkyWreck | Absorption: (25.0, 7.0, 12.0)
Scattering: 0.4
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.3
Emissive: RGBA(0.051, 0.486, 0.620, 1.000)
Emissive scale: 0.3
Start distance: 0
Sunlight scale: 0
Ambient scale: 1.5
Temperature: 0
| +| CrystalCave_Cache | SkyCrystalCaverns | Absorption: (3.0, 5.0, 8.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.35
Emissive: RGBA(0.380, 0.373, 0.906, 1.000)
Emissive scale: 0.3
Start distance: 15
Sunlight scale: 0
Ambient scale: 0
Temperature: 0
| +| CrystalCave_Castle | SkyTwistyBridges_Deep | Absorption: (6.0, 5.0, 5.5)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.8
Emissive: RGBA(0.380, 0.373, 0.906, 1.000)
Emissive scale: 0.4
Start distance: 15
Sunlight scale: 0
Ambient scale: 0
Temperature: 0
| +| CrystalCave_Inner | SkyTwistyBridges_Deep | Absorption: (5.0, 5.0, 5.5)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.403, 0.528, 0.981, 1.000)
Emissive scale: 0.2
Start distance: 20
Sunlight scale: 0
Ambient scale: 0
Temperature: 40
| +| GlacialConnection | SkyTreeSpires | Absorption: (10.0, 5.0, 4.0)
Scattering: 1.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.3
Emissive: RGBA(0.141, 0.204, 0.388, 1.000)
Emissive scale: 0.5
Start distance: 25
Sunlight scale: 0
Ambient scale: 0.2
Temperature: 0
| +| Glacier | SkyTreeSpires | Absorption: (20.0, 10.0, 4.0)
Scattering: 2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.3
Emissive: RGBA(0.141, 0.204, 0.388, 1.000)
Emissive scale: 1
Start distance: 25
Sunlight scale: 1
Ambient scale: 0.2
Temperature: 0
| +| margBase | SkyKelpCave | Absorption: (5.0, 3.0, 5.0)
Scattering: 0.8
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.6
Emissive: RGBA(0.176, 0.336, 0.604, 1.000)
Emissive scale: 0.4
Start distance: 20
Sunlight scale: 0
Ambient scale: 1
Temperature: 25
| +| margBase_Base | SkyKelpCave | Absorption: (5.0, 3.0, 5.0)
Scattering: 0.8
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.6
Emissive: RGBA(0.180, 0.604, 0.526, 1.000)
Emissive scale: 0.13
Start distance: 20
Sunlight scale: 0
Ambient scale: 1
Temperature: 30
| +| margBase_Base_Interior | SkyKelpCave | Absorption: (6.0, 2.0, 1.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.4
Emissive: RGBA(0.604, 0.604, 0.604, 1.000)
Emissive scale: 0.1
Start distance: 10
Sunlight scale: 0
Ambient scale: 1
Temperature: 0
| +| treespires_Thermal | SkyTreeSpires | Absorption: (0.0, 0.0, 0.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0
Emissive: RGBA(0.604, 0.604, 0.604, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 60
| +| thermalSpires_Thermal | SkyThermalSpires | Absorption: (0.0, 0.0, 0.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0
Emissive: RGBA(0.604, 0.604, 0.604, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 35
| +| thermalVent_Thermal | SkyThermalSpires | Absorption: (0.0, 0.0, 0.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0
Emissive: RGBA(0.604, 0.604, 0.604, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 100
| +| lava_Thermal | SkyThermalSpires | Absorption: (0.0, 0.0, 0.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0
Emissive: RGBA(0.604, 0.604, 0.604, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 200
| +| purpleVent_Thermal | SkyThermalSpires | Absorption: (0.0, 0.0, 0.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0
Emissive: RGBA(0.604, 0.604, 0.604, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 50
| +| hotsprings_Thermal | SkyThermalSpires | Absorption: (0.0, 0.0, 0.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0
Emissive: RGBA(0.604, 0.604, 0.604, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 40
| +| lilypads_crevice | SkyKelpCave | Absorption: (5.0, 3.0, 5.0)
Scattering: 1
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.6
Emissive: RGBA(0.115, 0.623, 0.403, 1.000)
Emissive scale: 0.12
Start distance: 15
Sunlight scale: 0
Ambient scale: 0
Temperature: 1
| +| lilypads_megatrench | SkyKelpCave | Absorption: (20.0, 5.0, 6.0)
Scattering: 0.7
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.180, 0.604, 0.525, 1.000)
Emissive scale: 0.15
Start distance: 20
Sunlight scale: 0.75
Ambient scale: 0
Temperature: 1
| +| arcticeast_iceberg_cavehigh | SkyKelpCave | Absorption: (20.0, 5.0, 6.0)
Scattering: 0.5
Scattering color: RGBA(0.000, 0.290, 0.717, 1.000)
Murkiness: 1
Emissive: RGBA(0.332, 0.524, 0.774, 1.000)
Emissive scale: 0.9
Start distance: 10
Sunlight scale: 0.5
Ambient scale: 0
Temperature: 1
| +| arcticeast_iceberg_cavelow | SkyKelpCave | Absorption: (20.0, 5.0, 6.0)
Scattering: 0.5
Scattering color: RGBA(0.000, 0.161, 0.388, 1.000)
Murkiness: 2
Emissive: RGBA(0.196, 0.353, 0.557, 1.000)
Emissive scale: 0.4
Start distance: 10
Sunlight scale: 0.1
Ambient scale: 0
Temperature: 1
| +| lilypads_crevice_exit | SkyKelpCave | Absorption: (20.0, 5.0, 6.0)
Scattering: 0.6
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.6
Emissive: RGBA(0.145, 0.678, 0.510, 1.000)
Emissive scale: 0.13
Start distance: 20
Sunlight scale: 0.2
Ambient scale: 0.25
Temperature: 1
| +| lilypads_crevice_open | SkyKelpCave | Absorption: (20.0, 5.0, 6.0)
Scattering: 0.6
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.6
Emissive: RGBA(0.145, 0.678, 0.510, 1.000)
Emissive scale: 0.13
Start distance: 20
Sunlight scale: 0.3
Ambient scale: 1
Temperature: 1
| +| EastArctic | SkyIceberg | Absorption: (10.0, 5.0, 4.0)
Scattering: 0.6
Scattering color: RGBA(0.000, 0.571, 0.745, 1.000)
Murkiness: 0.4
Emissive: RGBA(0.099, 0.287, 0.396, 1.000)
Emissive scale: 0.2
Start distance: 50
Sunlight scale: 1
Ambient scale: 1
Temperature: 1
| +| arcticCaldera | SkyMiningSite | Absorption: (10.0, 5.0, 4.0)
Scattering: 0.6
Scattering color: RGBA(0.000, 0.571, 0.745, 1.000)
Murkiness: 0.4
Emissive: RGBA(0.099, 0.287, 0.396, 1.000)
Emissive scale: 0.2
Start distance: 50
Sunlight scale: 1
Ambient scale: 1
Temperature: 1
| +| WestArctic | SkyIceberg | Absorption: (10.0, 5.0, 4.0)
Scattering: 1.5
Scattering color: RGBA(0.000, 0.571, 0.745, 1.000)
Murkiness: 0.5
Emissive: RGBA(0.099, 0.287, 0.396, 1.000)
Emissive scale: 0.2
Start distance: 50
Sunlight scale: 0.8
Ambient scale: 1
Temperature: 1
| +| EastArctic_IceBerg_Cave_Light | SkyIceberg | Absorption: (20.0, 10.0, 5.0)
Scattering: 0.5
Scattering color: RGBA(0.000, 0.571, 0.745, 1.000)
Murkiness: 0.4
Emissive: RGBA(0.099, 0.287, 0.396, 1.000)
Emissive scale: 0.2
Start distance: 20
Sunlight scale: 0
Ambient scale: 0
Temperature: 1
| +| WestArctic_IceBerg_Cave_Light | SkyIceberg | Absorption: (20.0, 10.0, 5.0)
Scattering: 0.5
Scattering color: RGBA(0.000, 0.571, 0.745, 1.000)
Murkiness: 0.4
Emissive: RGBA(0.099, 0.287, 0.396, 1.000)
Emissive scale: 0.1
Start distance: 20
Sunlight scale: 0
Ambient scale: 0
Temperature: 1
| +| EastArctic_IceBerg_Cave_Dark | SkyIceberg | Absorption: (20.0, 10.0, 5.0)
Scattering: 0.5
Scattering color: RGBA(0.000, 0.570, 0.745, 1.000)
Murkiness: 0.8
Emissive: RGBA(0.155, 0.299, 0.415, 1.000)
Emissive scale: 0.2
Start distance: 10
Sunlight scale: 0
Ambient scale: 0
Temperature: 1
| +| WestArctic_IceBerg_Cave_Dark | SkyIceberg | Absorption: (20.0, 10.0, 5.0)
Scattering: 0.2
Scattering color: RGBA(0.000, 0.570, 0.745, 1.000)
Murkiness: 0.8
Emissive: RGBA(0.155, 0.299, 0.415, 1.000)
Emissive scale: 0.4
Start distance: 10
Sunlight scale: 0
Ambient scale: 0
Temperature: 1
| +| EastArctic_IceBerg_CaveSealed_Dark | SkyIceberg | Absorption: (20.0, 10.0, 5.0)
Scattering: 0.5
Scattering color: RGBA(0.000, 0.498, 0.651, 1.000)
Murkiness: 0.8
Emissive: RGBA(0.196, 0.353, 0.557, 1.000)
Emissive scale: 0.1
Start distance: 10
Sunlight scale: 0
Ambient scale: 0
Temperature: 1
| +| WestArctic_IceBerg_CaveSealed_Dark | SkyIceberg | Absorption: (20.0, 10.0, 5.0)
Scattering: 0.1
Scattering color: RGBA(0.000, 0.498, 0.651, 1.000)
Murkiness: 0.8
Emissive: RGBA(0.196, 0.353, 0.557, 1.000)
Emissive scale: 0.1
Start distance: 10
Sunlight scale: 0
Ambient scale: 0
Temperature: 1
| +| EastArctic_IceBerg_CaveSurface_Dark | SkyIceberg | Absorption: (20.0, 10.0, 5.0)
Scattering: 0.1
Scattering color: RGBA(0.000, 0.498, 0.651, 1.000)
Murkiness: 0.1
Emissive: RGBA(0.196, 0.395, 0.557, 1.000)
Emissive scale: 0.1
Start distance: 6
Sunlight scale: 0
Ambient scale: 0
Temperature: 1
| +| WestArctic_IceBerg_CaveSurface_Dark | SkyIceberg | Absorption: (10.0, 5.0, 2.5)
Scattering: 0.05
Scattering color: RGBA(0.000, 0.498, 0.651, 1.000)
Murkiness: 0.1
Emissive: RGBA(0.196, 0.395, 0.557, 1.000)
Emissive scale: 0.1
Start distance: 6
Sunlight scale: 0
Ambient scale: 0
Temperature: 1
| +| Lilypads_BaseInterior | SkyLilyPads_BaseInterior | Absorption: (20.0, 5.0, 6.0)
Scattering: 0.2
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.45
Emissive: RGBA(0.180, 0.604, 0.404, 1.000)
Emissive scale: 0.05
Start distance: 3
Sunlight scale: 0
Ambient scale: 1
Temperature: 1
| +| arcticSpires | SkyGlacialBasin | Absorption: (20.0, 10.0, 5.0)
Scattering: 0.5
Scattering color: RGBA(0.000, 0.498, 0.651, 1.000)
Murkiness: 0.1
Emissive: RGBA(0.196, 0.395, 0.557, 1.000)
Emissive scale: 0.05
Start distance: 6
Sunlight scale: 1
Ambient scale: 1.3
Temperature: 0
| +| OutpostZero_Interior | SkyOutpostZero_Interior | Absorption: (20.0, 10.0, 5.0)
Scattering: 0.5
Scattering color: RGBA(0.000, 0.498, 0.651, 1.000)
Murkiness: 0.1
Emissive: RGBA(0.196, 0.395, 0.557, 1.000)
Emissive scale: 0.05
Start distance: 6
Sunlight scale: 1
Ambient scale: 1.3
Temperature: 0
| +| WorldEdge | SkyIceberg | Absorption: (10.0, 5.0, 4.0)
Scattering: 0.5
Scattering color: RGBA(0.000, 0.498, 0.651, 1.000)
Murkiness: 0.4
Emissive: RGBA(0.098, 0.286, 0.396, 1.000)
Emissive scale: 0.2
Start distance: 25
Sunlight scale: 0.1
Ambient scale: 6
Temperature: 1
| +| EndGameAsteroids | SkyAsteroids | Absorption: (10.0, 5.0, 4.0)
Scattering: 0.5
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0
Emissive: RGBA(0.098, 0.286, 0.396, 1.000)
Emissive scale: 0
Start distance: 25
Sunlight scale: 0
Ambient scale: 0
Temperature: 1
| +| ArcticSpiresCache | SkyKelpCave | Absorption: (12.0, 12.0, 7.0)
Scattering: 0
Scattering color: RGBA(1.000, 1.000, 1.000, 1.000)
Murkiness: 0.7
Emissive: RGBA(0.838, 0.639, 0.210, 1.000)
Emissive scale: 0.13
Start distance: 12
Sunlight scale: 0
Ambient scale: 0.8
Temperature: 1
| \ No newline at end of file diff --git a/Nautilus/Documentation/tutorials/overview.md b/Nautilus/Documentation/tutorials/overview.md index dad7b5a6..209ff6c8 100644 --- a/Nautilus/Documentation/tutorials/overview.md +++ b/Nautilus/Documentation/tutorials/overview.md @@ -10,6 +10,7 @@ This section covers step-by-step tutorials on how to get some of the useful feat * [Story goals](story-goals.md) * [Databank entries](databank-entries.md) * [Custom vehicle upgrade modules](vehicle-module.md) +* [Custom biomes](biomes.md) * TODO: [Audio (FMOD)](https://www.youtube.com/watch?v=dQw4w9WgXcQ) ### Prefabs diff --git a/Nautilus/Documentation/tutorials/toc.yml b/Nautilus/Documentation/tutorials/toc.yml index 189f6d05..fe408d2e 100644 --- a/Nautilus/Documentation/tutorials/toc.yml +++ b/Nautilus/Documentation/tutorials/toc.yml @@ -13,6 +13,8 @@ href: databank-entries.md - name: Custom vehicle upgrade modules href: vehicle-module.md + - name: Custom biomes + href: biomes.md - name: Prefabs items: diff --git a/Nautilus/Handlers/BiomeHandler.cs b/Nautilus/Handlers/BiomeHandler.cs new file mode 100644 index 00000000..992c83ba --- /dev/null +++ b/Nautilus/Handlers/BiomeHandler.cs @@ -0,0 +1,119 @@ +using Nautilus.Patchers; +using Nautilus.Utility; +using UnityEngine; + +namespace Nautilus.Handlers; + +/// +/// A handler class for registering new biome types. +/// +public static class BiomeHandler +{ + /// + /// Registers a new biome type into the game. + /// + /// The name of the biome, as seen in the F1 menu. + /// The fog settings of the biome. See . + /// The Sky of the biome, which determines reflections and general lighting. + public static void RegisterBiome(string name, WaterscapeVolume.Settings settings, SkyReference sky) + { + BiomePatcher.RegisterBiome(new BiomePatcher.CustomBiomeData(name, settings, sky)); + } + +#if SUBNAUTICA + /// + /// Adds music that plays in the given biome(s). The sound emitter is played when the given conditions are ended, until those conditions are no longer true, and then a fadeout is allowed. + /// + /// The name of the biome that this music can play in. Prefix matching and case insensitive, so using "canyon" for this value would affect biomes named "canyon_one" and "canyon_TWO". + /// The sound asset that plays in this biome. + /// Determines how this sound is affected by being indoors or outside. + public static void AddBiomeMusic(string biomeName, FMODAsset musicAsset, FMODGameParams.InteriorState interiorState = FMODGameParams.InteriorState.Always) + { + BiomePatcher.RegisterBiomeSoundData(new BiomePatcher.CustomBiomeSoundData(BiomePatcher.CustomBiomeSoundData.Type.Music, biomeName, musicAsset, interiorState)); + } +#endif + + /// + /// Adds an ambient sound that plays in the given biome(s). The sound emitter is played when the given conditions are ended, until those conditions are no longer true, and then a fadeout is allowed. + /// + /// The name of the biome that this ambient sound can play in. Prefix matching and case insensitive, so using "canyon" for this value would affect biomes named "canyon_one" and "canyon_TWO". + /// The sound asset that plays in this biome. + /// Determines how this sound is affected by being indoors or outside. + public static void AddBiomeAmbience(string biomeName, FMODAsset ambienceAsset, FMODGameParams.InteriorState interiorState) + { + BiomePatcher.RegisterBiomeSoundData(new BiomePatcher.CustomBiomeSoundData(BiomePatcher.CustomBiomeSoundData.Type.Ambience, biomeName, ambienceAsset, interiorState)); + } + + /// + /// Defines a reference to a new or existing Sky prefab. + /// + public class SkyReference + { + private enum Type + { + GameObjectReference, + StringLookup, + GetPrefabFromCallback + } + + private readonly GameObject _obj; + private readonly string _existingSkyPrefabNameToLookUp; + private System.Func _prefabCallback; + private readonly Type _type; + + + /// + /// Defines a reference to a new or existing Sky prefab. + /// + /// + public SkyReference(GameObject obj) + { + _obj = obj; + _type = Type.GameObjectReference; + } + + /// + /// Defines a reference to a base-game Sky prefab. + /// + /// The name of the Sky prefab from the list of base-game Skies, i.e. "SkySafeShallows". + /// A list of valid inputs can be found on this page: https://subnauticamodding.github.io/Nautilus/tutorials/biomes.html + public SkyReference(string existingSkyPrefabName) + { + _existingSkyPrefabNameToLookUp = existingSkyPrefabName; + _type = Type.StringLookup; + } + + /// + /// Defines a reference to a Sky prefab created from a callback at runtime. + /// + public SkyReference(System.Func prefabCallback) + { + _prefabCallback = prefabCallback; + _type = Type.GetPrefabFromCallback; + } + + public virtual GameObject GetSkyPrefabAtRuntime(WaterBiomeManager waterBiomeManager) + { + if (_type == Type.StringLookup) + { + foreach (var settings in waterBiomeManager.biomeSettings) + { + if (settings != null && settings.skyPrefab != null && settings.skyPrefab.name == _existingSkyPrefabNameToLookUp) + { + return settings.skyPrefab; + } + } + + InternalLogger.Error($"No existing Sky prefab found by name '{_existingSkyPrefabNameToLookUp}'"); + return null; + } + + if (_type == Type.GetPrefabFromCallback) + { + return _prefabCallback?.Invoke(); + } + + return _obj; + } + } +} \ No newline at end of file diff --git a/Nautilus/Handlers/CoordinatedSpawnsHandler.cs b/Nautilus/Handlers/CoordinatedSpawnsHandler.cs index 85628335..bd12dc50 100644 --- a/Nautilus/Handlers/CoordinatedSpawnsHandler.cs +++ b/Nautilus/Handlers/CoordinatedSpawnsHandler.cs @@ -66,6 +66,10 @@ public struct SpawnInfo : IEquatable internal Quaternion Rotation { get; } [JsonProperty] internal SpawnType Type { get; } + [JsonProperty] + internal Vector3 Scale { get; } + // For the sake of backwards compatibility, a scale of 0x0x0 is automatically converted to 1x1x1. Sorry, no 0x scale entities allowed. + internal Vector3 ActualScale => Scale == default ? Vector3.one : Scale; /// /// Initializes a new . @@ -73,7 +77,7 @@ public struct SpawnInfo : IEquatable /// TechType to spawn. /// Position to spawn into. public SpawnInfo(TechType techType, Vector3 spawnPosition) - : this(default, techType, spawnPosition, Quaternion.identity) { } + : this(default, techType, spawnPosition, Quaternion.identity, Vector3.one) { } /// /// Initializes a new . @@ -81,7 +85,7 @@ public SpawnInfo(TechType techType, Vector3 spawnPosition) /// ClassID to spawn. /// Position to spawn into. public SpawnInfo(string classId, Vector3 spawnPosition) - : this(classId, default, spawnPosition, Quaternion.identity) { } + : this(classId, default, spawnPosition, Quaternion.identity, Vector3.one) { } /// /// Initializes a new . @@ -90,7 +94,7 @@ public SpawnInfo(string classId, Vector3 spawnPosition) /// Position to spawn into. /// Rotation to spawn at. public SpawnInfo(TechType techType, Vector3 spawnPosition, Quaternion rotation) - : this(default, techType, spawnPosition, rotation) { } + : this(default, techType, spawnPosition, rotation, Vector3.one) { } /// /// Initializes a new . @@ -99,7 +103,27 @@ public SpawnInfo(TechType techType, Vector3 spawnPosition, Quaternion rotation) /// Position to spawn into. /// Rotation to spawn at. public SpawnInfo(string classId, Vector3 spawnPosition, Quaternion rotation) - : this(classId, default, spawnPosition, rotation) { } + : this(classId, default, spawnPosition, rotation, Vector3.one) { } + + /// + /// Initializes a new . + /// + /// TechType to spawn. + /// Position to spawn into. + /// Rotation to spawn at. + /// Scale to spawn with. + public SpawnInfo(TechType techType, Vector3 spawnPosition, Quaternion rotation, Vector3 scale) + : this(default, techType, spawnPosition, rotation, scale) { } + + /// + /// Initializes a new . + /// + /// ClassID to spawn. + /// Position to spawn into. + /// Rotation to spawn at. + /// Scale to spawn with. + public SpawnInfo(string classId, Vector3 spawnPosition, Quaternion rotation, Vector3 scale) + : this(classId, default, spawnPosition, rotation, scale) { } /// /// Initializes a new . @@ -108,7 +132,7 @@ public SpawnInfo(string classId, Vector3 spawnPosition, Quaternion rotation) /// Position to spawn into. /// Rotation to spawn at. public SpawnInfo(TechType techType, Vector3 spawnPosition, Vector3 rotation) - : this(default, techType, spawnPosition, Quaternion.Euler(rotation)) { } + : this(default, techType, spawnPosition, Quaternion.Euler(rotation), Vector3.one) { } /// /// Initializes a new . @@ -117,10 +141,30 @@ public SpawnInfo(TechType techType, Vector3 spawnPosition, Vector3 rotation) /// Position to spawn into. /// Rotation to spawn at. public SpawnInfo(string classId, Vector3 spawnPosition, Vector3 rotation) - : this(classId, default, spawnPosition, Quaternion.Euler(rotation)) { } + : this(classId, default, spawnPosition, Quaternion.Euler(rotation), Vector3.one) { } + + /// + /// Initializes a new . + /// + /// TechType to spawn. + /// Position to spawn into. + /// Rotation to spawn at. + /// Scale to spawn with. + public SpawnInfo(TechType techType, Vector3 spawnPosition, Vector3 rotation, Vector3 scale) + : this(default, techType, spawnPosition, Quaternion.Euler(rotation), scale) { } + + /// + /// Initializes a new . + /// + /// ClassID to spawn. + /// Position to spawn into. + /// Rotation to spawn at. + /// Scale to spawn with. + public SpawnInfo(string classId, Vector3 spawnPosition, Vector3 rotation, Vector3 scale) + : this(classId, default, spawnPosition, Quaternion.Euler(rotation), scale) { } [JsonConstructor] - internal SpawnInfo(string classId, TechType techType, Vector3 spawnPosition, Quaternion rotation) + internal SpawnInfo(string classId, TechType techType, Vector3 spawnPosition, Quaternion rotation, Vector3 scale) { ClassId = classId; TechType = techType; @@ -131,6 +175,7 @@ internal SpawnInfo(string classId, TechType techType, Vector3 spawnPosition, Qua default(TechType) => SpawnType.ClassId, _ => SpawnType.TechType }; + Scale = scale; } /// @@ -165,6 +210,7 @@ public override int GetHashCode() hash = (hash * 7) + SpawnPosition.GetHashCode(); hash = (hash * 7) + Rotation.GetHashCode(); hash = (hash * 7) + Type.GetHashCode(); + hash = (hash * 7) + ActualScale.GetHashCode(); return hash; } } @@ -186,7 +232,8 @@ public bool Equals(SpawnInfo other) && other.ClassId == ClassId && other.SpawnPosition == SpawnPosition && other.Rotation == Rotation - && other.Type == Type; + && other.Type == Type + && other.ActualScale == ActualScale; } internal enum SpawnType diff --git a/Nautilus/Initializer.cs b/Nautilus/Initializer.cs index bae327c9..e67761e4 100644 --- a/Nautilus/Initializer.cs +++ b/Nautilus/Initializer.cs @@ -1,6 +1,7 @@ using System; using BepInEx; using HarmonyLib; +using Nautilus.Handlers; using Nautilus.Patchers; using Nautilus.Utility; using Nautilus.Utility.ModMessages; @@ -77,5 +78,6 @@ static Initializer() InventoryPatcher.Patch(_harmony); WaterParkPatcher.Patch(_harmony); ModMessageSystem.Patch(); + BiomePatcher.Patch(_harmony); } } \ No newline at end of file diff --git a/Nautilus/MonoBehaviours/EntitySpawner.cs b/Nautilus/MonoBehaviours/EntitySpawner.cs index c94bb24a..3ebe0c59 100644 --- a/Nautilus/MonoBehaviours/EntitySpawner.cs +++ b/Nautilus/MonoBehaviours/EntitySpawner.cs @@ -36,7 +36,7 @@ IEnumerator SpawnAsync() } - GameObject obj = UWE.Utils.InstantiateDeactivated(prefab, spawnInfo.SpawnPosition, spawnInfo.Rotation); + GameObject obj = UWE.Utils.InstantiateDeactivated(prefab, spawnInfo.SpawnPosition, spawnInfo.Rotation, spawnInfo.ActualScale); LargeWorldEntity lwe = obj.GetComponent(); diff --git a/Nautilus/Patchers/BiomePatcher.cs b/Nautilus/Patchers/BiomePatcher.cs new file mode 100644 index 00000000..b4c61c84 --- /dev/null +++ b/Nautilus/Patchers/BiomePatcher.cs @@ -0,0 +1,143 @@ +using System.Collections.Generic; +using HarmonyLib; +using mset; +using Nautilus.Handlers; +using UnityEngine; + +namespace Nautilus.Patchers; + +internal static class BiomePatcher +{ + private static readonly List CustomBiomes = new(); + private static readonly List CustomBiomeSoundDatas = new(); + + internal static void Patch(Harmony harmony) + { + harmony.PatchAll(typeof(BiomePatcher)); + } + + internal static void RegisterBiome(CustomBiomeData biome) + { + CustomBiomes.Add(biome); + + var manager = WaterBiomeManager.main; + if (manager != null) + { + AddBiomeToWaterBiomeManager(manager, biome); + } + } + + internal static void RegisterBiomeSoundData(CustomBiomeSoundData biomeSoundData) + { + CustomBiomeSoundDatas.Add(biomeSoundData); + + // Water ambience is the parent of all biome sounds. If it exists, we missed our chance to add it automatically, so add it now. + if (Player.main == null) + return; + var waterAmbienceComponent = Player.main.GetComponentInChildren(); + if (waterAmbienceComponent != null) + { + AddBiomeSoundEmitterToWaterAmbience(waterAmbienceComponent, biomeSoundData); + } + } + + [HarmonyPatch(typeof(WaterBiomeManager), nameof(WaterBiomeManager.Start))] + [HarmonyPostfix] + internal static void WaterBiomeManagerStartPostfix(WaterBiomeManager __instance) + { + foreach (var customBiome in CustomBiomes) + { + AddBiomeToWaterBiomeManager(__instance, customBiome); + } + } + + [HarmonyPatch(typeof(WaterAmbience), nameof(WaterAmbience.Start))] + [HarmonyPostfix] + internal static void WaterAmbienceStartPostfix(WaterAmbience __instance) + { + foreach (var soundData in CustomBiomeSoundDatas) + { + AddBiomeSoundEmitterToWaterAmbience(__instance, soundData); + } + } + + internal static void AddBiomeToWaterBiomeManager(WaterBiomeManager manager, CustomBiomeData biome) + { + var skyPrefab = biome.Sky.GetSkyPrefabAtRuntime(manager); + manager.biomeSettings.Add(new WaterBiomeManager.BiomeSettings() + {name = biome.Name, settings = biome.Settings, skyPrefab = skyPrefab}); + var newIndexInBiomeLookup = manager.biomeLookup.Count; + Sky biomeSky = null; + if (skyPrefab != null && MarmoSkies.main != null) + { + biomeSky = MarmoSkies.main.GetSky(skyPrefab); + } + + manager.biomeSkies.Add(biomeSky); + if (manager.biomeLookup.ContainsKey(biome.Name)) + { + Debug.LogWarningFormat( + "WaterBiomeManager: biomeSettings contains multiple instances of the same biome name: {0}", new object[] + { + biome.Name + }); + } + else + { + manager.biomeLookup.Add(biome.Name, newIndexInBiomeLookup); + } + } + + internal static void AddBiomeSoundEmitterToWaterAmbience(WaterAmbience waterAmbience, CustomBiomeSoundData biomeSoundData) + { + var parent = waterAmbience.transform.Find(biomeSoundData.SoundType == CustomBiomeSoundData.Type.Music ? "music" : "background"); + var emitterObject = new GameObject(biomeSoundData.BiomeName + (biomeSoundData.SoundType == CustomBiomeSoundData.Type.Music ? "Music" : "Ambience")); + emitterObject.transform.parent = parent; + var emitter = emitterObject.AddComponent(); + emitter.SetAsset(biomeSoundData.SoundAsset); +#if SUBNAUTICA + emitter.stopImmediatelyOnDisable = true; +#endif + var gameParams = emitterObject.AddComponent(); + gameParams.loopingEmitter = emitter; + gameParams.onlyInBiome = biomeSoundData.BiomeName; + gameParams.interiorState = biomeSoundData.InteriorState; + } + + internal class CustomBiomeData + { + public string Name { get; } + public WaterscapeVolume.Settings Settings { get; } + public BiomeHandler.SkyReference Sky { get; } + + public CustomBiomeData(string name, WaterscapeVolume.Settings settings, BiomeHandler.SkyReference sky) + { + Name = name; + Settings = settings; + Sky = sky; + } + } + + internal class CustomBiomeSoundData + { + public Type SoundType { get; } + public string BiomeName { get; } + public FMODAsset SoundAsset { get; } + public FMODGameParams.InteriorState InteriorState { get; } + + public CustomBiomeSoundData(Type soundType, string biomeName, FMODAsset soundAsset, + FMODGameParams.InteriorState interiorState) + { + SoundType = soundType; + BiomeName = biomeName; + SoundAsset = soundAsset; + InteriorState = interiorState; + } + + public enum Type + { + Ambience, + Music + } + } +} \ No newline at end of file diff --git a/Nautilus/Utility/BiomeUtils.cs b/Nautilus/Utility/BiomeUtils.cs new file mode 100644 index 00000000..f7722d57 --- /dev/null +++ b/Nautilus/Utility/BiomeUtils.cs @@ -0,0 +1,148 @@ +using System; +using mset; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace Nautilus.Utility; + +/// +/// Utility class containing methods related to creating custom biomes. +/// +public static class BiomeUtils +{ + /// + /// A shorthand for creating an instance of the class. + /// A list of base game values can be found on this page: https://subnauticamodding.github.io/Nautilus/tutorials/biomes.html + /// + /// Attenuation coefficients of light (1/cm), red green and blue respectively. The default value is 100f, 18.29155f, 3.531373f. + /// The strength of light scattering, 1f by default. + /// The color of light scattering. Default value is white. + /// The murkiness of the water. Default value is 1f, recommended range is 0f-20f. + /// The emission color of the fog. Default value is black. + /// The emission strength of the fog. Default value is 1f. + /// The starting distance of the fog. Default value is 25f. Don't make this too high. + /// The strength of sunlight in this biome. Default value is 1f. + /// The strength of ambient light in this biome. Default value is 1f. + /// The temperature of this biome in Celsius. Default value is 24f. + /// An instance of the class with all settings applied. + public static WaterscapeVolume.Settings CreateBiomeSettings(Vector3 absorption, float scattering, + Color scatteringColor, float murkiness, Color emissive, float emissiveScale = 1, float startDistance = 25, + float sunlightScale = 1, float ambientScale = 1, float temperature = 24) + { + return new WaterscapeVolume.Settings() + { + absorption = absorption, + scattering = scattering, + scatteringColor = scatteringColor, + murkiness = murkiness, + emissive = emissive, + emissiveScale = emissiveScale, + startDistance = startDistance, + sunlightScale = sunlightScale, + ambientScale = ambientScale, + temperature = temperature + }; + } + + // DO NOT BLAME ME FOR THIS HORRIBLE CODE - SERIALIZE FIELD COMPONENTS HAVE VERY WEIRD BEHAVIOR IN OUR MODS! + + private static GameObject _skyPrefabsParent; + + /// + /// Creates a new basic Sky prefab. + /// + /// The name of the Sky, can be anything. + /// The texture of the Sky, VERY important in determining reflections. + /// If true, the Sky will appear darker at night and brighter at day. + /// Whether this sky is outdoors or not (should be false for the interiors of player-made structures). + /// The SkyPrefabFixer component for further modification (this is necessary to get around a Unity bug). + public static SkyPrefabFixer CreateSkyPrefab(string name, Texture specularCube, bool affectedByDayNightCycle = true, + bool outdoors = true) + { + if (_skyPrefabsParent == null) + { + _skyPrefabsParent = new GameObject("Nautilus.SkyPrefabsParent"); + _skyPrefabsParent.AddComponent(); + _skyPrefabsParent.SetActive(false); + Object.DontDestroyOnLoad(_skyPrefabsParent); + } + + var skyObject = new GameObject(name); + skyObject.transform.parent = _skyPrefabsParent.transform; + skyObject.AddComponent(); + + var sky = skyObject.AddComponent(); + + var skyPrefabFixer = skyObject.AddComponent(); + skyPrefabFixer.sky = sky; + skyPrefabFixer.specularCube = specularCube; + skyPrefabFixer.affectedByDayNightCycle = affectedByDayNightCycle; + skyPrefabFixer.outdoors = outdoors; + + return skyPrefabFixer; + } + + /// + /// Wrapper class that contains all Sky properties, which are automatically assigned. Necessary for our purposes because fields with SerializeField do not have their values saved when they are instantiated. Yes, everything HAS to be public! + /// + public class SkyPrefabFixer : MonoBehaviour + { +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + public Sky sky; + + public Texture specularCube; + + public Bounds dimensions = new Bounds(Vector3.zero, Vector3.one); + + public bool affectedByDayNightCycle = true; + + public bool outdoors = true; + + public float masterIntensity = 1f; + + public float skyIntensity = 1f; + + public float specIntensity = 1f; + + public float diffIntensity = 1f; + + public float camExposure = 1f; + + public float specIntensityLM = 0.2f; + + public float diffIntensityLM = 0.05f; + + public bool hdrSky = true; + + public bool hdrSpec = true; + + public bool linearSpace = true; + + public bool autoDetectColorSpace = true; + + public bool hasDimensions; +#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member + + private void OnEnable() + { + if (sky == null) return; + sky.specularCube = specularCube; + sky.dimensions = dimensions; + sky.affectedByDayNightCycle = affectedByDayNightCycle; + sky.outdoors = outdoors; + sky.masterIntensity = masterIntensity; + sky.skyIntensity = skyIntensity; + sky.diffIntensity = diffIntensity; + sky.camExposure = camExposure; + sky.specIntensity = specIntensity; + sky.specIntensityLM = specIntensityLM; + sky.diffIntensityLM = diffIntensityLM; + sky.hdrSky = hdrSky; + sky.hdrSpec = hdrSpec; + sky.linearSpace = linearSpace; + sky.autoDetectColorSpace = autoDetectColorSpace; + sky.hasDimensions = hasDimensions; + } + } + +} \ No newline at end of file diff --git a/Version.targets b/Version.targets index 69107f7f..b723b8f7 100644 --- a/Version.targets +++ b/Version.targets @@ -3,7 +3,7 @@ 1.0.0 - 23 + 25 pre.$(SuffixNumber) \ No newline at end of file