mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Merge branch 'master' into planetary-features
This commit is contained in:
commit
73de80bcc0
@ -183,6 +183,7 @@ namespace NewHorizons.Builder.Body
|
||||
meshRenderer.sharedMaterial.SetFloat("_Radius", size * 0.4f);
|
||||
meshRenderer.sharedMaterial.SetFloat("_DistortFadeDist", size);
|
||||
meshRenderer.sharedMaterial.SetFloat("_MaxDistortRadius", size * 2.8f);
|
||||
meshRenderer.sharedMaterial.SetFloat("_MassScale", -1);
|
||||
meshRenderer.sharedMaterial.SetColor("_Color", new Color(1.88f, 1.88f, 1.88f, 1f));
|
||||
|
||||
var ambientLight = GameObject.Instantiate(GameObject.Find("WhiteHole_Body/WhiteHoleVisuals/AmbientLight_WH"));
|
||||
@ -211,6 +212,7 @@ namespace NewHorizons.Builder.Body
|
||||
whiteHoleVolume._fluidVolume = whiteHoleFluidVolume;
|
||||
whiteHoleVolume._whiteHoleBody = OWRB;
|
||||
whiteHoleVolume._whiteHoleProxyShadowSuperGroup = body.GetComponent<ProxyShadowCasterSuperGroup>();
|
||||
whiteHoleVolume._radius = size * 0.5f;
|
||||
|
||||
whiteHoleVolumeGO.GetComponent<SphereCollider>().radius = size;
|
||||
|
||||
|
||||
@ -70,27 +70,10 @@ namespace NewHorizons.Builder.Body
|
||||
fluidVolume.SetValue("_radius", waterSize);
|
||||
fluidVolume.SetValue("_layer", LayerMask.NameToLayer("BassicEffectVolume"));
|
||||
|
||||
// Because assetbundles were a bitch...
|
||||
GameObject fog1 = new GameObject();
|
||||
fog1.transform.parent = waterGO.transform;
|
||||
fog1.transform.localScale = new Vector3(1, 1, 1);
|
||||
fog1.AddComponent<MeshFilter>().mesh = GameObject.Find("CloudsTopLayer_GD").GetComponent<MeshFilter>().mesh;
|
||||
fog1.AddComponent<MeshRenderer>().material = new Material(Shader.Find("Sprites/Default"));
|
||||
fog1.GetComponent<MeshRenderer>().material.color = new Color32(0, 75, 50, 5);
|
||||
|
||||
GameObject fog2 = new GameObject();
|
||||
fog2.transform.parent = waterGO.transform;
|
||||
fog2.transform.localScale = new Vector3(1.001f, 1.001f, 1.001f);
|
||||
fog2.AddComponent<MeshFilter>().mesh = GameObject.Find("CloudsTopLayer_GD").GetComponent<MeshFilter>().mesh;
|
||||
fog2.AddComponent<MeshRenderer>().material = new Material(Shader.Find("Sprites/Default"));
|
||||
fog2.GetComponent<MeshRenderer>().material.color = new Color32(0, 75, 50, 5);
|
||||
|
||||
GameObject fog3 = new GameObject();
|
||||
fog3.transform.parent = fog2.transform;
|
||||
fog3.transform.localScale = new Vector3(1.001f, 1.001f, 1.001f);
|
||||
fog3.AddComponent<MeshFilter>().mesh = GameObject.Find("CloudsTopLayer_GD").GetComponent<MeshFilter>().mesh;
|
||||
fog3.AddComponent<MeshRenderer>().material = new Material(Shader.Find("Sprites/Default"));
|
||||
fog3.GetComponent<MeshRenderer>().material.color = new Color32(0, 75, 50, 5);
|
||||
var fogGO = GameObject.Instantiate(GameObject.Find("GiantsDeep_Body/Sector_GD/Sector_GDInterior/Effects_GDInterior/OceanFog"), waterGO.transform);
|
||||
fogGO.name = "OceanFog";
|
||||
fogGO.transform.localPosition = Vector3.zero;
|
||||
fogGO.transform.localScale = Vector3.one;
|
||||
|
||||
if (module.Curve != null)
|
||||
{
|
||||
|
||||
@ -49,6 +49,14 @@ namespace NewHorizons.Builder.General
|
||||
astroObject.SetValue("_customName", config.Name);
|
||||
astroObject.SetValue("_primaryBody", primaryBody);
|
||||
|
||||
// Expand gravitational sphere of influence of the primary to encompass this body if needed
|
||||
if(primaryBody?.gameObject?.GetComponent<SphereCollider>() != null && !config.Orbit.IsStatic)
|
||||
{
|
||||
var primarySphereOfInfluence = primaryBody.GetGravityVolume().gameObject.GetComponent<SphereCollider>();
|
||||
if (primarySphereOfInfluence.radius < config.Orbit.SemiMajorAxis)
|
||||
primarySphereOfInfluence.radius = config.Orbit.SemiMajorAxis * 1.5f;
|
||||
}
|
||||
|
||||
if (config.Orbit.IsTidallyLocked)
|
||||
{
|
||||
var alignment = body.AddComponent<AlignWithTargetBody>();
|
||||
|
||||
@ -20,7 +20,7 @@ namespace NewHorizons.Builder.General
|
||||
if (exponent == 2f) gravityRadius = Mathf.Sqrt(gravityRadius);
|
||||
|
||||
// To let you actually orbit things the way you would expect we cap this at 4x the diameter if its not a star or black hole (this is what giants deep has)
|
||||
if (config.Star != null || config.Singularity != null) gravityRadius = Mathf.Min(gravityRadius, 4 * config.Base.SurfaceSize);
|
||||
if (config.Star == null && config.Singularity == null) gravityRadius = Mathf.Min(gravityRadius, 4 * config.Base.SurfaceSize);
|
||||
else gravityRadius = Mathf.Min(gravityRadius, 15 * config.Base.SurfaceSize);
|
||||
if (config.Base.SphereOfInfluence != 0f) gravityRadius = config.Base.SphereOfInfluence;
|
||||
|
||||
|
||||
@ -87,19 +87,39 @@ namespace NewHorizons.Builder.Props
|
||||
sector.OnOccupantEnterSector += ((SectorDetector sd) => StreamingManager.LoadStreamingAssets(assetBundle));
|
||||
}
|
||||
|
||||
foreach(var component in prop.GetComponents<SectoredMonoBehaviour>())
|
||||
{
|
||||
component.SetSector(sector);
|
||||
if(component is AnglerfishController)
|
||||
{
|
||||
try
|
||||
{
|
||||
(component as AnglerfishController)._chaseSpeed += OWPhysics.CalculateOrbitVelocity(go.GetAttachedOWRigidbody(), go.GetComponent<AstroObject>().GetPrimaryBody().GetAttachedOWRigidbody()).magnitude;
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
Logger.LogError($"Couldn't update AnglerFish chase speed: {e.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach (var component in prop.GetComponentsInChildren<SectoredMonoBehaviour>())
|
||||
{
|
||||
component.SetSector(sector);
|
||||
}
|
||||
|
||||
|
||||
foreach (var component in prop.GetComponentsInChildren<Component>())
|
||||
{
|
||||
// TODO: Make this work or smthng
|
||||
if (component is GhostIK) (component as GhostIK).enabled = false;
|
||||
if(component is GhostEffects) (component as GhostEffects).enabled = false;
|
||||
|
||||
|
||||
var enabledField = component.GetType().GetField("enabled");
|
||||
if(enabledField != null && enabledField.FieldType == typeof(bool)) enabledField.SetValue(component, true);
|
||||
}
|
||||
|
||||
|
||||
prop.transform.parent = go.transform;
|
||||
prop.transform.localPosition = position == null ? Vector3.zero : (Vector3)position;
|
||||
prop.transform.position = position == null ? go.transform.position : go.transform.TransformPoint((Vector3)position);
|
||||
|
||||
Quaternion rot = rotation == null ? Quaternion.identity : Quaternion.Euler((Vector3)rotation);
|
||||
prop.transform.localRotation = rot;
|
||||
|
||||
@ -17,6 +17,7 @@ namespace NewHorizons.Components
|
||||
private OWAudioSource _oneShotSource;
|
||||
|
||||
private bool _isWarpingIn;
|
||||
private bool _wearingSuit;
|
||||
private bool _waitingToBeSeated;
|
||||
private bool _eyesOpen = false;
|
||||
|
||||
@ -89,7 +90,7 @@ namespace NewHorizons.Components
|
||||
whiteHoleRenderer.SetActive(true);
|
||||
}
|
||||
|
||||
public void WarpIn()
|
||||
public void WarpIn(bool wearingSuit)
|
||||
{
|
||||
Logger.Log("Starting warp-in");
|
||||
// Trying really hard to stop the player from dying while warping in
|
||||
@ -98,6 +99,7 @@ namespace NewHorizons.Components
|
||||
Locator.GetDeathManager()._invincible = true;
|
||||
|
||||
_isWarpingIn = true;
|
||||
_wearingSuit = wearingSuit;
|
||||
_whitehole.Create();
|
||||
}
|
||||
|
||||
@ -148,7 +150,7 @@ namespace NewHorizons.Components
|
||||
if (Main.Instance.CurrentStarSystem.Equals("SolarSystem")) Teleportation.teleportPlayerToShip();
|
||||
_whitehole.Create();
|
||||
_waitingToBeSeated = true;
|
||||
if (!Locator.GetPlayerController()._isWearingSuit)
|
||||
if (_wearingSuit && !Locator.GetPlayerController()._isWearingSuit)
|
||||
{
|
||||
SpawnPointBuilder.SuitUp();
|
||||
}
|
||||
@ -164,6 +166,18 @@ namespace NewHorizons.Components
|
||||
Locator.GetDeathManager()._impactDeathSpeed = _impactDeathSpeed;
|
||||
Player.getResources()._currentHealth = 100f;
|
||||
Locator.GetDeathManager()._invincible = false;
|
||||
|
||||
// For some reason warping into the ship makes you suffocate while in the ship
|
||||
if(_wearingSuit) Player.getResources().OnSuitUp();
|
||||
var o2Volume = Locator.GetShipBody().GetComponent<OxygenVolume>();
|
||||
var atmoVolume = GameObject.Find("Ship_Body/Volumes/ShipAtmosphereVolume").GetComponent<SimpleFluidVolume>();
|
||||
|
||||
Player.getResources()._cameraFluidDetector.AddVolume(atmoVolume);
|
||||
Player.getResources()._cameraFluidDetector.OnVolumeAdded(atmoVolume);
|
||||
Player.getResources()._cameraFluidDetector.OnVolumeActivated(atmoVolume);
|
||||
|
||||
GlobalMessenger.FireEvent("EnterShip");
|
||||
PlayerState.OnEnterShip();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -41,6 +41,7 @@ namespace NewHorizons
|
||||
|
||||
private bool _isChangingStarSystem = false;
|
||||
public bool IsWarping { get; private set; } = false;
|
||||
public bool WearingSuit { get; private set; } = false;
|
||||
|
||||
private ShipWarpController _shipWarpController;
|
||||
|
||||
@ -57,7 +58,8 @@ namespace NewHorizons
|
||||
ShaderBundle = Main.Instance.ModHelper.Assets.LoadBundle("AssetBundle/shader");
|
||||
BodyDict["SolarSystem"] = new List<NewHorizonsBody>();
|
||||
|
||||
Utility.Patches.Apply();
|
||||
Tools.Patches.Apply();
|
||||
Tools.OWCameraFix.Apply();
|
||||
|
||||
Logger.Log("Begin load of config files...", Logger.LogType.Log);
|
||||
|
||||
@ -96,6 +98,10 @@ namespace NewHorizons
|
||||
return;
|
||||
}
|
||||
|
||||
FurthestOrbit = 30000;
|
||||
|
||||
Tools.OWCameraFix.Apply();
|
||||
|
||||
HeavenlyBodyBuilder.Reset();
|
||||
|
||||
NewHorizonsData.Load();
|
||||
@ -200,7 +206,7 @@ namespace NewHorizons
|
||||
|
||||
_shipWarpController = GameObject.Find("Ship_Body").AddComponent<ShipWarpController>();
|
||||
Logger.Log($"Is the player warping in? {IsWarping}");
|
||||
if (IsWarping) Instance.ModHelper.Events.Unity.FireInNUpdates(() => _shipWarpController.WarpIn(), 1);
|
||||
if (IsWarping) Instance.ModHelper.Events.Unity.FireInNUpdates(() => _shipWarpController.WarpIn(WearingSuit), 1);
|
||||
IsWarping = false;
|
||||
}
|
||||
|
||||
@ -447,7 +453,7 @@ namespace NewHorizons
|
||||
if (body.Config.Base.HasAmbientLight)
|
||||
AmbientLightBuilder.Make(go, sphereOfInfluence);
|
||||
|
||||
var sector = MakeSector.Make(go, owRigidBody, sphereOfInfluence);
|
||||
var sector = MakeSector.Make(go, owRigidBody, sphereOfInfluence * 2f);
|
||||
ao.SetValue("_rootSector", sector);
|
||||
|
||||
VolumesBuilder.Make(go, body.Config.Base.SurfaceSize, sphereOfInfluence);
|
||||
@ -519,7 +525,7 @@ namespace NewHorizons
|
||||
LavaBuilder.Make(go, sector, rb, lava);
|
||||
}
|
||||
|
||||
if (body.Config.Lava != null)
|
||||
if (body.Config.Lava != null)
|
||||
LavaBuilder.Make(go, sector, rb, body.Config.Lava);
|
||||
|
||||
// Backwards compatability
|
||||
@ -580,6 +586,7 @@ namespace NewHorizons
|
||||
_currentStarSystem = newStarSystem;
|
||||
_isChangingStarSystem = true;
|
||||
IsWarping = warp;
|
||||
WearingSuit = PlayerState.IsWearingSuit();
|
||||
|
||||
// We kill them so they don't move as much
|
||||
Locator.GetDeathManager().KillPlayer(DeathType.Meditation);
|
||||
|
||||
25
NewHorizons/Tools/OWCameraFix.cs
Normal file
25
NewHorizons/Tools/OWCameraFix.cs
Normal file
@ -0,0 +1,25 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NewHorizons.Tools
|
||||
{
|
||||
public static class OWCameraFix
|
||||
{
|
||||
public static void Apply()
|
||||
{
|
||||
Main.Instance.ModHelper.HarmonyHelper.AddPostfix<OWCamera>("Awake", typeof(OWCameraFix), nameof(OWCameraFix.OnOWCameraAwake));
|
||||
}
|
||||
|
||||
private static void OnOWCameraAwake(OWCamera __instance)
|
||||
{
|
||||
var newDist = __instance.farClipPlane * 10f;
|
||||
if (__instance.useFarCamera) newDist = Mathf.Min(500000f, newDist);
|
||||
__instance.farClipPlane = newDist;
|
||||
__instance.farCameraDistance = newDist;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -9,8 +9,9 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using Logger = NewHorizons.Utility.Logger;
|
||||
|
||||
namespace NewHorizons.Utility
|
||||
namespace NewHorizons.Tools
|
||||
{
|
||||
public class Patches
|
||||
{
|
||||
@ -55,7 +56,6 @@ namespace NewHorizons.Utility
|
||||
|
||||
// Postfixes
|
||||
Main.Instance.ModHelper.HarmonyHelper.AddPostfix<MapController>("Awake", typeof(Patches), nameof(Patches.OnMapControllerAwake));
|
||||
Main.Instance.ModHelper.HarmonyHelper.AddPostfix<OWCamera>("Awake", typeof(Patches), nameof(Patches.OnOWCameraAwake));
|
||||
Main.Instance.ModHelper.HarmonyHelper.AddPostfix<ShipLogMapMode>("EnterMode", typeof(Patches), nameof(Patches.OnShipLogMapModeEnterMode));
|
||||
}
|
||||
|
||||
@ -84,12 +84,7 @@ namespace NewHorizons.Utility
|
||||
____maxZoomDistance *= 6f;
|
||||
____minPitchAngle = -90f;
|
||||
____zoomSpeed *= 4f;
|
||||
__instance._mapCamera.farClipPlane = Main.FurthestOrbit * 3f;
|
||||
}
|
||||
|
||||
public static void OnOWCameraAwake(OWCamera __instance)
|
||||
{
|
||||
__instance.farClipPlane *= 4f;
|
||||
__instance._mapCamera.farClipPlane = Main.FurthestOrbit * 10f;
|
||||
}
|
||||
|
||||
public static bool OnSunLightParamUpdaterLateUpdate(SunLightParamUpdater __instance)
|
||||
@ -3,7 +3,8 @@
|
||||
"author": "xen",
|
||||
"name": "New Horizons",
|
||||
"uniqueName": "xen.NewHorizons",
|
||||
"version": "0.6.2",
|
||||
"version": "0.7.3",
|
||||
"owmlVersion": "2.1.0",
|
||||
"dependencies": [ "PacificEngine.OW_CommonResources" ]
|
||||
"dependencies": [ "PacificEngine.OW_CommonResources" ],
|
||||
"conflicts": [ "Raicuparta.QuantumSpaceBuddies", "Vesper.OuterWildsMMO", "Vesper.AutoResume" ]
|
||||
}
|
||||
|
||||
@ -186,6 +186,11 @@
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"hasAtmosphere": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"description" : "Whether we use an atmospheric shader on the planet."
|
||||
},
|
||||
"atmosphereTint": {
|
||||
"type": "object",
|
||||
"description": "Colour of atmospheric shader on the planet.",
|
||||
@ -346,6 +351,22 @@
|
||||
"rotationSpeed": {
|
||||
"type": "number",
|
||||
"default": 0
|
||||
},
|
||||
"curve": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"time": {
|
||||
"type": "integer",
|
||||
"default": 0
|
||||
},
|
||||
"value": {
|
||||
"type": "integer",
|
||||
"default": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -550,6 +571,22 @@
|
||||
"hasAtmosphere": {
|
||||
"type": "boolean",
|
||||
"default": true
|
||||
},
|
||||
"curve": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"time": {
|
||||
"type": "integer",
|
||||
"default": 0
|
||||
},
|
||||
"value": {
|
||||
"type": "integer",
|
||||
"default": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
78
README.md
78
README.md
@ -5,9 +5,7 @@
|
||||
|
||||
A custom world creation tool for Outer Wilds.
|
||||
|
||||
You can view the addons creators have made (or create one yourself) [here](https://outerwildsmods.com/custom-worlds)!
|
||||
|
||||
Planets are created using a JSON file format structure, and placed in the `planets` folder (or in any sub-directory of it).
|
||||
You can view the addons creators have made (or upload one yourself) [here](https://outerwildsmods.com/custom-worlds)!
|
||||
|
||||
Check the ship's log for how to use your warp drive to travel between star systems!
|
||||
|
||||
@ -29,6 +27,9 @@ Check the ship's log for how to use your warp drive to travel between star syste
|
||||
- [Star](#star)
|
||||
- [Signal](#signal)
|
||||
- [Singularity](#singularity)
|
||||
- [Water](#water)
|
||||
- [Lava](#lava)
|
||||
- [Sand](#sand)
|
||||
- [How to destroy existing planets](#how-to-destroy-existing-planets)
|
||||
- [How to update existing planets](#how-to-update-existing-planets)
|
||||
- [How to use New Horizons in other mods](#how-to-use-new-horizons-in-other-mods)
|
||||
@ -64,7 +65,7 @@ Check the ship's log for how to use your warp drive to travel between star syste
|
||||
- Implement all planet features:
|
||||
- Tornados + floating islands
|
||||
- Sand funnels (water? lava? star?)
|
||||
- Variable surface height (sand/water/lava/star)
|
||||
- Variable surface height (sand/water/lava/star) (done)
|
||||
- Let any star go supernova
|
||||
- Geysers
|
||||
- Meteors
|
||||
@ -80,7 +81,15 @@ Check the ship's log for how to use your warp drive to travel between star syste
|
||||
|
||||
There is a template [here](https://github.com/xen-42/ow-new-horizons-config-template) if you want to release your own planet mod using configs. You can learn how the configs work by picking apart the [Real Solar System](https://github.com/xen-42/outer-wilds-real-solar-system) mod or the [New Horizons Examples](https://github.com/xen-42/ow-new-horizons-examples) mod.
|
||||
|
||||
Your config file will look something like this:
|
||||
Planets are created using a JSON file format structure, and placed in a folder called `planets` (or in any sub-directory of it) in the location where New Horizons is installed (by default this folder doesn't exist, you have to create it within the `xen.NewHorizons` directory).
|
||||
|
||||
To locate this directory, click the "..." symbol next to "New Horizons" in the Outer Wilds Mod Manager and then click "show in explorer" in the pop-up.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Now that you have created your planets folder, this is where you will put your planet config files. A config file will look something like this:
|
||||
```
|
||||
{
|
||||
"name" : "Wetrock",
|
||||
@ -132,6 +141,8 @@ The first field you should have in any config file is the `name`. This should be
|
||||
|
||||
After `name` is `starSystem`. You can use this to place the planet in a different system accessible using a black-hole (see the [Singularity](#singularity) module). To ensure compatibility with other mods this name should be unique. After setting a value for this, the changes in the config will only affect that body in that star system. By default it is "SolarSystem", which is the scene from the stock game.
|
||||
|
||||
Including the "$schema" line is optional, but will allow your text editor to highlight errors and auto-suggest words in your config. I recommend using VSCode as a text editor, but anything that supports Json files will work. Something as basic as notepad will work but will not highlight any of your errors.
|
||||
|
||||
The config file is then split into modules, each one with it's own fields that define how that part of the planet will be generated. In the example above I've used the `Base`, `Orbit`, `Atmosphere`, and `Props` modules. A config file must have a `Base` and `Orbit` module, the rest are optional.
|
||||
|
||||
Each { must match up with a closing } to denote its section. If you don't know how JSONs work then check Wikipedia.
|
||||
@ -154,10 +165,9 @@ Modules look like this:
|
||||
|
||||
In this example the `Star` module has a `size` field and a `tint` field. Since the colour is a complex object it needs another set of { and } around it, and then it has its own fields inside it : `r`, `g`, `b`, and `a`. Don't forget to put commas after each field.
|
||||
|
||||
Most fields are either true/false, a decimal number, and integer number, or a string (word with quotation marks around it). There are also colours and positions.
|
||||
|
||||
A colour is defined like this (with integers from 0 to 255):
|
||||
Most fields are either true/false, a decimal number, and integer number, or a string (word with quotation marks around it). There are also the following types of values:
|
||||
|
||||
#### Colour:
|
||||
```
|
||||
{
|
||||
"r" : 200,
|
||||
@ -167,7 +177,7 @@ A colour is defined like this (with integers from 0 to 255):
|
||||
}
|
||||
```
|
||||
|
||||
A position is defined like this:
|
||||
#### Position:
|
||||
```
|
||||
{
|
||||
"x" : 182.4,
|
||||
@ -176,6 +186,16 @@ A position is defined like this:
|
||||
}
|
||||
```
|
||||
|
||||
#### Scale curve:
|
||||
```
|
||||
[
|
||||
{"time":0, "value":1},
|
||||
{"time":5, "value":0},
|
||||
{"time":12, "value":1}
|
||||
]
|
||||
```
|
||||
Specifically it is a list of `time` and `value` pairs. The time is given in minutes and the value goes from 0 to 1. What the example means if that when the loop starts the object will be at its max size, after 5 minutes it will shrink to nothing, then 7 minutes later (so 12 minutes total in the loop) it will have grown back to full size. You can put as many values in the list as you want.
|
||||
|
||||
Now I'll go through the different modules and what they can do. Most fields are optional and will have some default value that will work fine if you don't include them.
|
||||
|
||||
### Base
|
||||
@ -185,11 +205,7 @@ Now I'll go through the different modules and what they can do. Most fields are
|
||||
- "surfaceGravity" : (decimal number) How strong the acceleration due to gravity is at the surface. For example, Timber Hearth has a value of 12.
|
||||
- "gravityFallOff" : (string) Acceptable values are "linear" or "inverseSquared". Defaults to "linear". Most planets use linear but the sun and some moons use inverseSquared.
|
||||
- "surfaceSize" : (decimal number) A scale height used for a number of things. Should be the approximate radius of the body.
|
||||
- "waterSize" : (decimal number) If you want the planet to have water on it, set a value for this.
|
||||
- "waterTint" : (colour)
|
||||
- "groundSize" : (decimal number) If you want the planet to have a perfectly spherical surface, set a value for this.
|
||||
- "blackHoleSize" : (decimal number) If you want there to be a black hole in the center of the planet, set a value for this. Can't be larger than 100 for now.
|
||||
- "lavaSize" : (decimal number) If you want the planet to have lava on it, set a value for this.
|
||||
- "hasCometTrail" : (true/false) If you want the body to have a trail like the Interloper.
|
||||
- "hasReferenceFrame" : (true/false) If the body should be target-able from the map screen.
|
||||
- "centerOfSolarSystem" : (true/false) If the body is the new center of the solar system be sure to set this to true.
|
||||
@ -229,7 +245,7 @@ Some of these I don't explain since they are just orbital parameters. If you don
|
||||
- "hasAtmosphere" : (true/false) If the planet should have an atmosphere shader like some of the other planets. Purely cosmetic. Will not get rid of any clouds or fog you've put.
|
||||
|
||||
### HeightMap
|
||||
Allows you to generate more interesting terrain than the sphere given by groundSize in the Base module.
|
||||
Allows you to generate more interesting terrain than the sphere given by groundSize in the Base module. Textures should be at least 2048 x 1024 resolution.
|
||||
|
||||
- "heightMap" : (string) The file path to a texture that will be used as a heightmap. Image should be greyscale. White is for high terrain and black for low.
|
||||
- "textureMap" : (string) The file path to a texture that will be applied to the planet.
|
||||
@ -313,6 +329,13 @@ The positions of the binaries will be based off of their masses (as determined b
|
||||
### Props
|
||||
Lets you place items on the surface of the planet.
|
||||
|
||||
For these there are currently two ways of setting them up: specify an asset bundle and path to load a custom asset you created, or specify the path to the item you want to copy from the game in the scene hierarchy. Use the [Unity Explorer](https://outerwildsmods.com/mods/unityexplorer) mod to find an object you want to copy onto your new body. Some objects work better than others for this. Good luck. Some pointers:
|
||||
- Use "Object Explorer" to search
|
||||
- Do not use the search functionality on Scene Explorer, it is really really slow. Use the "Object Search" tab instead.
|
||||
- Generally you can find planets by writing their name with no spaces/punctuation followed by "_Body".
|
||||
|
||||
The different things you can specify in the props section are:
|
||||
|
||||
- "scatter" : (list) I'll just give an example.
|
||||
|
||||
```
|
||||
@ -321,8 +344,6 @@ Lets you place items on the surface of the planet.
|
||||
]
|
||||
```
|
||||
|
||||
The path is in the hierarchy of the solar system. Use the [Unity Explorer](https://outerwildsmods.com/mods/unityexplorer) mod to find an object you want to copy onto your new body. Some objects work better than others for this. Good luck.
|
||||
|
||||
- "details" : (list of detail info objects)
|
||||
|
||||
A detail info object can have the following parameters:
|
||||
@ -375,6 +396,7 @@ public class CreateAssetBundles
|
||||
- "longitudeOfAscendingNode" : (decimal number)
|
||||
- "texture" : (string) The file path to the image used for the rings. You can either give it a full image of the rings or a 1 pixel wide strip.
|
||||
- "rotationSpeed" : (decimal number)
|
||||
- "curve" : (scale curve) Allows for changing the ring's size over time.
|
||||
|
||||
### Spawn
|
||||
- "playerSpawnPoint" : (position) If you want the player to spawn on the new body, set a value for this. Press "P" in game to have the game log the position you're looking at to find a good value for this.
|
||||
@ -387,6 +409,7 @@ Use this if you are creating a star.
|
||||
- "tint" : (colour)
|
||||
- "solarFlareTint" : (colour) The flares are tinted weirdly so this won't make the actual colour of the star. You'll want to use trial and error to find something that matches.
|
||||
- "solarLuminosity" : (decimal number) Relative luminosity of this star compared to the sun.
|
||||
- "curve" : (scale curve)
|
||||
|
||||
### Signal
|
||||
- "signals" : (list of signal info objects)
|
||||
@ -430,6 +453,20 @@ This allows you to make black holes and white holes, and to pair them.
|
||||
- "type" : (string) Put either "BlackHole" or "WhiteHole".
|
||||
- "targetStarSystem" : (string) You can have a black hole bring you to a different star system scene using this.
|
||||
|
||||
### Water
|
||||
- "size" : (decimal number) highest radius of the water volume
|
||||
- "tint" : (colour)
|
||||
- "curve" : (scale curve)
|
||||
|
||||
### Lava
|
||||
- "size" : (decimal number) height radius of the lava volume
|
||||
- "curve" : (scale curve)
|
||||
|
||||
### Sand
|
||||
- "size" : (decimal number) highest radius of the sand volume
|
||||
- "tint" : (colour)
|
||||
- "curve" : (scale curve)
|
||||
|
||||
### How to destroy existing planets
|
||||
|
||||
You do this (but with the appropriate name) as it's own config.
|
||||
@ -444,7 +481,7 @@ Remember that if you destroy Timber Hearth you better put a [Spawn](#spawn) modu
|
||||
|
||||
### How to update existing planets
|
||||
|
||||
Similar to above, make a config where "Name" is the name of the planet. The name should be able to just match their in-game english names, however if you encounter any issues with that here are the in-code names for planets that are guaranteed to work: `SUN`, `CAVE_TWIN` (Ember Twin), `TOWER_TWIN` (Ash Twin), `TIMBER_HEARTH`, `BRITTLE_HOLLOW`, `GIANTS_DEEP`, `DARK_BRAMBLE`, `COMET` (Interloper), `WHITE_HOLE`, `WHITE_HOLE_TARGET` (Whitehole station I believe), `QUANTUM_MOON`, `ORBITAL_PROBE_CANNON`, `TIMBER_MOON` (Attlerock), `VOLCANIC_MOON` (Hollow's Lantern), `DREAMWORLD`, `MapSatellite`, `RINGWORD` (the Stranger).
|
||||
Similar to above, make a config where "Name" is the name of the planet. The name should be able to just match their in-game english names, however if you encounter any issues with that here are the in-code names for planets that are guaranteed to work: `SUN`, `CAVE_TWIN` (Ember Twin), `TOWER_TWIN` (Ash Twin), `TIMBER_HEARTH`, `BRITTLE_HOLLOW`, `GIANTS_DEEP`, `DARK_BRAMBLE`, `COMET` (Interloper), `WHITE_HOLE`, `WHITE_HOLE_TARGET` (Whitehole station I believe), `QUANTUM_MOON`, `ORBITAL_PROBE_CANNON`, `TIMBER_MOON` (Attlerock), `VOLCANIC_MOON` (Hollow's Lantern), `DREAMWORLD`, `MapSatellite`, `RINGWORLD` (the Stranger).
|
||||
|
||||
Only some of the above modules are supported (currently) for existing planets. Things you cannot modify for existing planets include: heightmaps, procedural generation, gravity, or their orbits. You also can't make them into stars or binary focal points (but why would you want to, just delete them and replace them entirely). However this still means there are many things you can do: completely change their atmospheres, give them rings, asteroid belts, comet tails, lava, water, prop details, or signals.
|
||||
|
||||
@ -482,11 +519,12 @@ Join the [Outer Wilds Modding Discord](https://discord.gg/MvbCbBz6Q6) if you hav
|
||||
|
||||
## Credits
|
||||
Authors:
|
||||
- xen (from New Horizons v0.1.0 onwards)
|
||||
- Mister_Nebula (created original titled Marshmallow)
|
||||
- xen (New Horizons v0.1.0 onwards)
|
||||
- Mister_Nebula (Marshmallow v0.1 to v1.1.0)
|
||||
|
||||
New Horizons contributors:
|
||||
New Horizons was made with help from:
|
||||
- salomj (Implemented [OW_CommonResources](https://github.com/PacificEngine/OW_CommonResources) support introduced in v0.5.0)
|
||||
- Raicuparta (Integrated the [New Horizons Template](https://github.com/xen-42/ow-new-horizons-config-template) into the Outer Wilds Mods website)
|
||||
|
||||
Marshmallow was made with help from:
|
||||
- TAImatem
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user