## Bug fixes
- Fix softlock affecting The Machine due to a secret hidden slide reel
that destroyed everything (thanks Damian for finding this)
- More than one cloak can now work at a time, and it only took me over a
year (Fixes #108)
- Stranger cloak will no longer appear in other systems (Fixes #600)
- Fixed cloaks breaking if the planet has no ReferenceFrame enabled
This commit is contained in:
Nick 2023-07-15 11:53:34 -04:00 committed by GitHub
commit b3831fa577
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 315 additions and 49 deletions

View File

@ -12,7 +12,7 @@
"Ernesto#Fish",
"With help from#Raicuparta\n#dgarroDC\n#jtsalomo\n#and the modding community",
" ",
"Based off Marshmallow made by#Mister_Nebula",
"Based off Marshmallow made by#_nebula",
"With help from#AmazingAlek\n#Raicuparta\n#and the Outer Wilds discord server",
" ",
"This work is unofficial Fan Content and is not affiliated with Mobius Digital"

View File

@ -1,5 +1,6 @@
using NewHorizons.Components.Sectored;
using NewHorizons.External.Modules;
using NewHorizons.Handlers;
using NewHorizons.Utility;
using NewHorizons.Utility.Files;
using NewHorizons.Utility.OWML;
@ -36,7 +37,8 @@ namespace NewHorizons.Builder.Body
var radius = module.radius;
var newCloak = Object.Instantiate(_prefab, sector?.transform ?? planetGO.transform);
var newCloak = _prefab.InstantiateInactive();
newCloak.transform.parent = sector?.transform ?? planetGO.transform;
newCloak.transform.position = planetGO.transform.position;
newCloak.transform.name = "CloakingField";
newCloak.transform.localScale = Vector3.one * radius;
@ -44,18 +46,25 @@ namespace NewHorizons.Builder.Body
Object.Destroy(newCloak.GetComponent<PlayerCloakEntryRedirector>());
var cloakFieldController = newCloak.GetComponent<CloakFieldController>();
cloakFieldController._cloakScaleDist = radius * 2000 / 3000f;
cloakFieldController._farCloakRadius = radius * 500 / 3000f;
cloakFieldController._innerCloakRadius = radius * 900 / 3000f;
cloakFieldController._nearCloakRadius = radius * 800 / 3000f;
cloakFieldController._cloakScaleDist = module.cloakScaleDist ?? (radius * 2000 / 3000f);
cloakFieldController._farCloakRadius = module.farCloakRadius ?? (radius * 500 / 3000f);
cloakFieldController._innerCloakRadius = module.innerCloakRadius ?? (radius * 900 / 3000f);
cloakFieldController._nearCloakRadius = module.nearCloakRadius ?? (radius * 800 / 3000f);
cloakFieldController._referenceFrameVolume = OWRB._attachedRFVolume;
cloakFieldController._exclusionSector = null;
cloakFieldController._cloakSphereVolume = (sector?.transform ?? planetGO.transform).GetComponentInChildren<OWTriggerVolume>();
var cloakVolumeObj = new GameObject("CloakVolume");
cloakVolumeObj.transform.parent = planetGO.transform;
cloakVolumeObj.transform.localPosition = Vector3.zero;
var cloakVolume = cloakVolumeObj.AddComponent<SphereShape>();
cloakVolume.radius = module.farCloakRadius ?? (radius * 500 / 3000f);
cloakFieldController._cloakSphereVolume = cloakVolumeObj.AddComponent<OWTriggerVolume>();
cloakFieldController._ringworldFadeRenderers = new OWRenderer[0];
var cloakSectorController = newCloak.AddComponent<CloakSectorController>();
cloakSectorController.Init(newCloak.GetComponent<CloakFieldController>(), planetGO);
cloakSectorController.Init(cloakFieldController, planetGO);
var cloakAudioSource = newCloak.GetComponentInChildren<OWAudioSource>();
cloakAudioSource._audioSource = cloakAudioSource.GetComponent<AudioSource>();
@ -67,6 +76,8 @@ namespace NewHorizons.Builder.Body
cloakSectorController.EnableCloak();
CloakHandler.RegisterCloak(cloakFieldController);
// To cloak from the start
Delay.FireOnNextUpdate(cloakSectorController.OnPlayerExit);
Delay.FireOnNextUpdate(hasCustomAudio ? cloakSectorController.TurnOnMusic : cloakSectorController.TurnOffMusic);

View File

@ -8,7 +8,13 @@ namespace NewHorizons.Builder.General
{
public static GameObject Make(GameObject planetGO, OWRigidbody owrb, float sphereOfInfluence, ReferenceFrameModule module)
{
if (!module.enabled) return null;
if (!module.enabled)
{
// We can't not build a reference frame volume, Cloak requires one to be there
module.maxTargetDistance = 0f;
module.hideInMap = true;
owrb.SetIsTargetable(false);
}
var rfGO = new GameObject("RFVolume");
rfGO.transform.parent = planetGO.transform;

View File

@ -102,7 +102,6 @@ namespace NewHorizons.Builder.Props
StreamingHandler.SetUpStreaming(prop, detail.keepLoaded ? null : sector);
// Could check this in the for loop but I'm not sure what order we need to know about this in
var isTorch = prop.GetComponent<VisionTorchItem>() != null;
isItem = false;
foreach (var component in prop.GetComponentsInChildren<Component>(true))
@ -120,7 +119,7 @@ namespace NewHorizons.Builder.Props
{
if (FixUnsectoredComponent(component)) continue;
}
else FixSectoredComponent(component, sector, isTorch, detail.keepLoaded);
else FixSectoredComponent(component, sector, detail.keepLoaded);
FixComponent(component, go, detail.ignoreSun);
}
@ -219,7 +218,7 @@ namespace NewHorizons.Builder.Props
/// <summary>
/// Fix components that have sectors. Has a specific fix if there is a VisionTorchItem on the object.
/// </summary>
private static void FixSectoredComponent(Component component, Sector sector, bool isTorch, bool keepLoaded)
private static void FixSectoredComponent(Component component, Sector sector, bool keepLoaded)
{
// keepLoaded should remove existing groups
// renderers/colliders get enabled later so we dont have to do that here
@ -265,10 +264,10 @@ namespace NewHorizons.Builder.Props
socket._sector = sector;
}
// Fix slide reel - Softlocks if this object is a vision torch
else if(!isTorch && component is SlideCollectionContainer container)
// TODO: Fix low res reels (probably in VanillaFix since its a vanilla bug)
else if(component is SlideReelItem)
{
sector.OnOccupantEnterSector.AddListener(_ => container.LoadStreamingTextures());
}
else if(component is NomaiRemoteCameraPlatform remoteCameraPlatform)

View File

@ -26,7 +26,7 @@ namespace NewHorizons.Builder.Volumes
volume._collider = collider;
volume._shrinkBodies = info.shrinkBodies;
volume._onlyAffectsPlayerAndShip = info.onlyAffectsPlayerAndShip;
volume._onlyAffectsPlayerAndShip = info.onlyAffectsPlayerRelatedBodies;
go.SetActive(true);

View File

@ -0,0 +1,77 @@
using NewHorizons.Components.Stars;
using NewHorizons.Handlers;
using NewHorizons.Utility.OWML;
using UnityEngine;
namespace NewHorizons.Components.EOTE
{
internal class CloakLocatorController : MonoBehaviour
{
private float _currentAngle = float.MaxValue;
private CloakFieldController _currentController;
public void Start()
{
// Enable and disable all cloaks, else Stranger state is weird at the start
foreach (var cloak in CloakHandler.Cloaks)
{
SetCurrentCloak(cloak);
cloak.enabled = false;
}
}
// Always makes sure the Locator's cloak field controller is the one that is between the player and the sun
public void Update()
{
var sun = SunLightEffectsController.Instance?.transform;
if (sun != null)
{
// Keep tracking the angle to the current cloak
if (_currentController != null)
{
_currentAngle = CalculateAngleToCloak(_currentController.transform, sun);
}
// Compare the current cloak to all the other ones
foreach (var cloak in CloakHandler.Cloaks)
{
if (cloak == _currentController) continue;
var angle = CalculateAngleToCloak(cloak.transform, sun);
if (angle < _currentAngle && cloak != _currentController)
{
_currentAngle = angle;
SetCurrentCloak(cloak);
NHLogger.LogVerbose($"Changed cloak controller to {_currentController.GetAttachedOWRigidbody().name} angle {_currentAngle}");
}
}
}
}
public void SetCurrentCloak(CloakFieldController cloak)
{
if (_currentController != null)
{
_currentController.enabled = false;
}
_currentController = cloak;
if (_currentController != null)
{
_currentController.enabled = true;
Locator.RegisterCloakFieldController(_currentController);
_currentController.UpdateCloakVisualsState();
}
}
private float CalculateAngleToCloak(Transform cloak, Transform sun)
{
var playerVector = Locator.GetPlayerTransform().position - sun.position;
var cloakVector = cloak.position - sun.position;
return Vector3.Angle(playerVector, cloakVector);
}
}
}

View File

@ -217,7 +217,7 @@ namespace NewHorizons.External.Configs
if (Base.centerOfSolarSystem) Orbit.isStatic = true;
if (Atmosphere?.clouds?.lightningGradient != null) Atmosphere.clouds.hasLightning = true;
if (Bramble?.dimension != null && Orbit?.staticPosition == null) throw new Exception($"Dimension {name} must have Orbit.staticPosition defined.");
if (Bramble?.dimension != null) canShowOnTitle = false;
if (Bramble?.dimension != null) canShowOnTitle = false;
if (Orbit?.staticPosition != null) Orbit.isStatic = true;
// For each quantum group, verify the following:
@ -463,7 +463,7 @@ namespace NewHorizons.External.Configs
if (ring.curve != null) ring.scaleCurve = ring.curve;
}
}
if (Base.zeroGravityRadius != 0f)
{
Volumes ??= new VolumesModule();
@ -616,6 +616,14 @@ namespace NewHorizons.External.Configs
CometTail.rotationOverride = Base.cometTailRotation;
}
}
if (Volumes?.destructionVolumes != null)
{
foreach (var destructionVolume in Volumes.destructionVolumes)
{
if (destructionVolume.onlyAffectsPlayerAndShip) destructionVolume.onlyAffectsPlayerRelatedBodies = true;
}
}
}
#endregion
}

View File

@ -7,11 +7,24 @@ namespace NewHorizons.External.Modules
public class CloakModule
{
/// <summary>
/// Radius of the cloaking field around the planet. It's a bit finicky so experiment with different values. If you
/// don't want a cloak, leave this as 0.
/// Radius of the cloaking field around the planet. For the Stranger this is 3000
/// </summary>
public float radius;
/// <summary>
/// Not sure what this is. For the Stranger it is 2000. Optional (will default to be proportional to the cloak radius).
/// </summary>
public float? cloakScaleDist;
/// Not sure what this is. For the Stranger it is 900. Optional (will default to be proportional to the cloak radius).
public float? innerCloakRadius;
/// Not sure what this is. For the Stranger it is 800. Optional (will default to be proportional to the cloak radius).
public float? nearCloakRadius;
/// Not sure what this is. For the Stranger it is 500. Optional (will default to be proportional to the cloak radius).
public float? farCloakRadius;
[Obsolete("audioClip is deprecated, please use audio instead")]
public string audioClip;

View File

@ -7,12 +7,14 @@ namespace NewHorizons.External.Modules.Volumes
public class ProbeModule
{
/// <summary>
/// Add probe destruction volumes to this planet. These will delete your probe.
/// Add probe destruction volumes to this planet.
/// These will delete your probe just like the eye of the universe does.
/// </summary>
public VolumeInfo[] destructionVolumes;
/// <summary>
/// Add probe safety volumes to this planet. These will stop the probe destruction volumes from working.
/// Add probe safety volumes to this planet.
/// These will stop the probe destruction volumes from working.
/// </summary>
public VolumeInfo[] safetyVolumes;
}

View File

@ -9,10 +9,12 @@ namespace NewHorizons.External.Modules.Volumes
{
/// <summary>
/// Add anti travel music rulesets to this planet.
/// This means no space/traveling music while inside the ruleset/volume.
/// Usually used on planets.
/// </summary>
public VolumeInfo[] antiTravelMusicRulesets;
/// <summary>
/// Add player impact rulesets to this planet.
/// Add player impact rulesets to this planet.
/// </summary>
public PlayerImpactRulesetInfo[] playerImpactRulesets;
/// <summary>

View File

@ -1,4 +1,5 @@
using Newtonsoft.Json;
using System;
using System.ComponentModel;
namespace NewHorizons.External.Modules.Volumes.VolumeInfos
@ -12,9 +13,11 @@ namespace NewHorizons.External.Modules.Volumes.VolumeInfos
[DefaultValue(true)] public bool shrinkBodies = true;
/// <summary>
/// Whether this volume only affects the player and ship.
/// Whether this volume only affects the player, ship, probe/scout, model rocket ship, and nomai shuttle.
/// </summary>
public bool onlyAffectsPlayerAndShip;
public bool onlyAffectsPlayerRelatedBodies;
[Obsolete] public bool onlyAffectsPlayerAndShip;
}
}

View File

@ -13,6 +13,7 @@ namespace NewHorizons.External.Modules.Volumes
/// <summary>
/// Add destruction volumes to this planet.
/// Destroys bodies if they enter this volume. Can kill the player and recall the scout probe.
/// </summary>
public DestructionVolumeInfo[] destructionVolumes;
@ -23,31 +24,38 @@ namespace NewHorizons.External.Modules.Volumes
/// <summary>
/// Add hazard volumes to this planet.
/// Causes damage to player when inside this volume.
/// </summary>
public HazardVolumeInfo[] hazardVolumes;
/// <summary>
/// Add interference volumes to this planet.
/// Hides HUD markers of ship scout/probe and prevents scout photos if you are not inside the volume together with ship or scout probe.
/// </summary>
public VolumeInfo[] interferenceVolumes;
/// <summary>
/// Add insulating volumes to this planet. These will stop electricty hazard volumes from affecting you (just like the jellyfish).
/// Add insulating volumes to this planet.
/// These will stop electricty hazard volumes from affecting you (just like the jellyfish).
/// </summary>
public VolumeInfo[] insulatingVolumes;
/// <summary>
/// Add light source volumes to this planet. These will activate rafts and other light detectors.
/// Add light source volumes to this planet.
/// These will activate rafts and other light detectors.
/// </summary>
public VolumeInfo[] lightSourceVolumes;
/// <summary>
/// Add map restriction volumes to this planet.
/// The map will be disabled when inside this volume.
/// </summary>
public VolumeInfo[] mapRestrictionVolumes;
/// <summary>
/// Add notification volumes to this planet.
/// Sends a notification to the player just like ghost matter does when you get too close
/// and also to the ship just like when you damage a component on the ship.
/// </summary>
public NotificationVolumeInfo[] notificationVolumes;
@ -62,7 +70,8 @@ namespace NewHorizons.External.Modules.Volumes
public ProbeModule probe;
/// <summary>
/// Add reference frame blocker volumes to this planet. These will stop the player from seeing/targeting any reference frames.
/// Add reference frame blocker volumes to this planet.
/// These will stop the player from seeing/targeting any reference frames.
/// </summary>
public VolumeInfo[] referenceFrameBlockerVolumes;
@ -82,7 +91,8 @@ namespace NewHorizons.External.Modules.Volumes
public RulesetModule rulesets;
/// <summary>
/// Add speed trap volumes to this planet. Slows down the player when they enter this volume.
/// Add speed trap volumes to this planet.
/// Slows down the player when they enter this volume.
/// </summary>
public SpeedTrapVolumeInfo[] speedTrapVolumes;

View File

@ -0,0 +1,91 @@
using NewHorizons.Components.EOTE;
using NewHorizons.OtherMods.VoiceActing;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace NewHorizons.Handlers
{
public static class CloakHandler
{
private static HashSet<CloakFieldController> _cloaks;
public static HashSet<CloakFieldController> Cloaks => _cloaks;
private static bool _flagStrangerDisabled;
public static bool FlagStrangerDisabled
{
get => _flagStrangerDisabled;
set
{
_flagStrangerDisabled = value;
if (value && _strangerCloak != null)
{
DeregisterCloak(_strangerCloak);
}
}
}
public static bool VisibleStrangerInstalled => Main.Instance.ModHelper.Interaction.ModExists("xen.Decloaked");
private static CloakFieldController _strangerCloak;
private static CloakLocatorController _cloakLocator;
public static void Init()
{
_cloaks = new();
FlagStrangerDisabled = false;
_strangerCloak = null;
_cloakLocator = null;
}
public static void OnSystemReady()
{
// If NH is disabling the stranger it will not be gone yet, however other mods might have gotten rid of it
var stranger = Locator.GetAstroObject(AstroObject.Name.RingWorld)?.gameObject;
if (stranger != null && stranger.activeInHierarchy && !FlagStrangerDisabled && !VisibleStrangerInstalled)
{
_strangerCloak = stranger.GetComponentInChildren<CloakFieldController>();
RegisterCloak(_strangerCloak);
}
_cloakLocator = Locator.GetRootTransform().gameObject.AddComponent<CloakLocatorController>();
foreach (var cloak in _cloaks)
{
cloak.enabled = false;
cloak.UpdateCloakVisualsState();
}
Refresh();
}
public static void RegisterCloak(CloakFieldController cloak)
{
_cloaks.Add(cloak);
}
public static void DeregisterCloak(CloakFieldController cloak)
{
if (_cloaks.Contains(cloak))
{
cloak.enabled = false;
cloak.UpdateCloakVisualsState();
_cloaks.Remove(cloak);
Refresh();
}
}
private static void Refresh()
{
// Make sure we aren't using the disabled cloak
Locator.RegisterCloakFieldController(_cloaks.FirstOrDefault());
if (!_cloaks.Any())
{
Locator.RegisterCloakFieldController(null);
Shader.DisableKeyword("_CLOAKINGFIELDENABLED");
_cloakLocator.SetCurrentCloak(null);
_cloakLocator.enabled = false;
}
}
}
}

View File

@ -83,6 +83,12 @@ namespace NewHorizons.Handlers
{
NHLogger.LogVerbose($"Removing [{ao.name}]");
if (ao.GetAstroObjectName() == AstroObject.Name.RingWorld)
{
CloakHandler.FlagStrangerDisabled = true;
if (Locator._cloakFieldController.GetComponentInParent<AstroObject>() == ao) Locator._cloakFieldController = null;
}
if (ao.gameObject == null || !ao.gameObject.activeInHierarchy)
{
NHLogger.LogVerbose($"[{ao.name}] was already removed");

View File

@ -8,7 +8,7 @@ using static NewHorizons.External.Configs.StarSystemConfig;
namespace NewHorizons.Handlers
{
public class VesselCoordinatePromptHandler
public static class VesselCoordinatePromptHandler
{
private static List<Tuple<string, string, ScreenPrompt>> _factSystemIDPrompt;
// TODO: move this to ImageUtilities

View File

@ -403,6 +403,7 @@ namespace NewHorizons
SingularityBuilder.Init();
AtmosphereBuilder.Init();
BrambleNodeBuilder.Init(BodyDict[CurrentStarSystem].Select(x => x.Config).Where(x => x.Bramble?.dimension != null).ToArray());
CloakHandler.Init();
if (isSolarSystem)
{
@ -570,6 +571,8 @@ namespace NewHorizons
PlayerSpawnHandler.OnSystemReady(shouldWarpInFromShip, shouldWarpInFromVessel);
VesselCoordinatePromptHandler.RegisterPrompts(SystemDict.Where(system => system.Value.Config.Vessel?.coords != null).Select(x => x.Value).ToList());
CloakHandler.OnSystemReady();
}
public void EnableWarpDrive()
@ -811,6 +814,12 @@ namespace NewHorizons
return;
}
if (LoadManager.GetCurrentScene() == OWScene.SolarSystem || LoadManager.GetCurrentScene() == OWScene.EyeOfTheUniverse)
{
// Slide reel unloading is tied to being removed from the sector, so we do that here to prevent a softlock
Locator.GetPlayerSectorDetector().RemoveFromAllSectors();
}
if (IsChangingStarSystem) return;
IsWarpingFromShip = warp;

View File

@ -15,8 +15,8 @@
<DebugType>none</DebugType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="OWML" Version="2.9.0" />
<PackageReference Include="OuterWildsGameLibs" Version="1.1.13.456" />
<PackageReference Include="OWML" Version="2.9.3" />
<Reference Include="../Lib/System.ComponentModel.Annotations.dll" />
</ItemGroup>
<ItemGroup>

View File

@ -745,7 +745,36 @@
"properties": {
"radius": {
"type": "number",
"description": "Radius of the cloaking field around the planet. It's a bit finicky so experiment with different values. If you\ndon't want a cloak, leave this as 0.",
"description": "Radius of the cloaking field around the planet. For the Stranger this is 3000",
"format": "float"
},
"cloakScaleDist": {
"type": [
"null",
"number"
],
"description": "Not sure what this is. For the Stranger it is 2000. Optional (will default to be proportional to the cloak radius).",
"format": "float"
},
"innerCloakRadius": {
"type": [
"null",
"number"
],
"format": "float"
},
"nearCloakRadius": {
"type": [
"null",
"number"
],
"format": "float"
},
"farCloakRadius": {
"type": [
"null",
"number"
],
"format": "float"
},
"audio": {
@ -3263,7 +3292,7 @@
},
"destructionVolumes": {
"type": "array",
"description": "Add destruction volumes to this planet.",
"description": "Add destruction volumes to this planet.\nDestroys bodies if they enter this volume. Can kill the player and recall the scout probe.",
"items": {
"$ref": "#/definitions/DestructionVolumeInfo"
}
@ -3277,42 +3306,42 @@
},
"hazardVolumes": {
"type": "array",
"description": "Add hazard volumes to this planet.",
"description": "Add hazard volumes to this planet.\nCauses damage to player when inside this volume.",
"items": {
"$ref": "#/definitions/HazardVolumeInfo"
}
},
"interferenceVolumes": {
"type": "array",
"description": "Add interference volumes to this planet.",
"description": "Add interference volumes to this planet.\nHides HUD markers of ship scout/probe and prevents scout photos if you are not inside the volume together with ship or scout probe.",
"items": {
"$ref": "#/definitions/VolumeInfo"
}
},
"insulatingVolumes": {
"type": "array",
"description": "Add insulating volumes to this planet. These will stop electricty hazard volumes from affecting you (just like the jellyfish).",
"description": "Add insulating volumes to this planet.\nThese will stop electricty hazard volumes from affecting you (just like the jellyfish).",
"items": {
"$ref": "#/definitions/VolumeInfo"
}
},
"lightSourceVolumes": {
"type": "array",
"description": "Add light source volumes to this planet. These will activate rafts and other light detectors.",
"description": "Add light source volumes to this planet.\nThese will activate rafts and other light detectors.",
"items": {
"$ref": "#/definitions/VolumeInfo"
}
},
"mapRestrictionVolumes": {
"type": "array",
"description": "Add map restriction volumes to this planet.",
"description": "Add map restriction volumes to this planet.\nThe map will be disabled when inside this volume.",
"items": {
"$ref": "#/definitions/VolumeInfo"
}
},
"notificationVolumes": {
"type": "array",
"description": "Add notification volumes to this planet.",
"description": "Add notification volumes to this planet.\nSends a notification to the player just like ghost matter does when you get too close\nand also to the ship just like when you damage a component on the ship.",
"items": {
"$ref": "#/definitions/NotificationVolumeInfo"
}
@ -3330,7 +3359,7 @@
},
"referenceFrameBlockerVolumes": {
"type": "array",
"description": "Add reference frame blocker volumes to this planet. These will stop the player from seeing/targeting any reference frames.",
"description": "Add reference frame blocker volumes to this planet.\nThese will stop the player from seeing/targeting any reference frames.",
"items": {
"$ref": "#/definitions/VolumeInfo"
}
@ -3355,7 +3384,7 @@
},
"speedTrapVolumes": {
"type": "array",
"description": "Add speed trap volumes to this planet. Slows down the player when they enter this volume.",
"description": "Add speed trap volumes to this planet.\nSlows down the player when they enter this volume.",
"items": {
"$ref": "#/definitions/SpeedTrapVolumeInfo"
}
@ -3494,9 +3523,9 @@
"description": "Whether the bodies will shrink when they enter this volume or just disappear instantly.",
"default": true
},
"onlyAffectsPlayerAndShip": {
"onlyAffectsPlayerRelatedBodies": {
"type": "boolean",
"description": "Whether this volume only affects the player and ship."
"description": "Whether this volume only affects the player, ship, probe/scout, model rocket ship, and nomai shuttle."
},
"radius": {
"type": "number",
@ -3859,14 +3888,14 @@
"properties": {
"destructionVolumes": {
"type": "array",
"description": "Add probe destruction volumes to this planet. These will delete your probe.",
"description": "Add probe destruction volumes to this planet.\nThese will delete your probe just like the eye of the universe does.",
"items": {
"$ref": "#/definitions/VolumeInfo"
}
},
"safetyVolumes": {
"type": "array",
"description": "Add probe safety volumes to this planet. These will stop the probe destruction volumes from working.",
"description": "Add probe safety volumes to this planet.\nThese will stop the probe destruction volumes from working.",
"items": {
"$ref": "#/definitions/VolumeInfo"
}
@ -3968,14 +3997,14 @@
"properties": {
"antiTravelMusicRulesets": {
"type": "array",
"description": "Add anti travel music rulesets to this planet.",
"description": "Add anti travel music rulesets to this planet.\nThis means no space/traveling music while inside the ruleset/volume.\nUsually used on planets.",
"items": {
"$ref": "#/definitions/VolumeInfo"
}
},
"playerImpactRulesets": {
"type": "array",
"description": "Add player impact rulesets to this planet.",
"description": "Add player impact rulesets to this planet. ",
"items": {
"$ref": "#/definitions/PlayerImpactRulesetInfo"
}

View File

@ -4,8 +4,8 @@
"author": "xen, Bwc9876, clay, MegaPiggy, John, Trifid, Hawkbar, Book",
"name": "New Horizons",
"uniqueName": "xen.NewHorizons",
"version": "1.12.1",
"owmlVersion": "2.9.0",
"version": "1.12.2",
"owmlVersion": "2.9.3",
"dependencies": [ "JohnCorby.VanillaFix", "_nebula.MenuFramework", "xen.CommonCameraUtility", "dgarro.CustomShipLogModes" ],
"conflicts": [ "Raicuparta.QuantumSpaceBuddies", "PacificEngine.OW_CommonResources" ],
"pathsToPreserve": [ "planets", "systems", "translations" ]