More Respawn Ship Parameters
I've seen a few topics on respawn ships, and it seems most people are requesting that you limit respawn ships in a way that only works with a single map or a single mod. I instead, want to increase respawn ship's parameters to allow you to increase the filters and make it more modular and supported by any map.
So far your respawn ships contain these parameters;
<MinimalAirDensity>0.8</MinimalAirDensity> <UseForPlanetsWithAtmosphere>true</UseForPlanetsWithAtmosphere> <UseForPlanetsWithoutAtmosphere>true</UseForPlanetsWithoutAtmosphere> <UseForSpace>true</UseForSpace>
However, these aren't enough to filter out nonviable planets such as Jupiter from my solar system map which has a gravity of 24g and would crush anything on it. Unfortunately, your respawn ship parameters make it impossible for me to stop people from spawning on that planet and because wheels in the game are impervious to damage the rovers can drive around on Jupiter without any issue at all. I'm proposing we add some new parameters to the respawn ships file, to planet files, and allow modders to edit their world SBC file to add a line to a planet to override possible spawn locations.Respawn Ship File:
<MaximumAirDensity>Int <MinimalGravity>Int <MaximumGravity>Int <BreathableAtmosphere>Bool <MinimalPlanetSizeKM>Int <MaximumPlanetSizeKM>Int <MinDistanceFromPlanetKM>Int <MaxDistanceFromPlanetKM>Int <SpawnType>ValueNow to explain;Min-Max air density would allow you to filter out planets below and above a specific density.
Min-Max Gravity would do the same, for gravity.
Breathable Atmosphere would filter out all planets that are opposite the value, aka true would mean any planet you can't take your helmet off on is filtered out.
Min-Max Planet Size would filter out planets that are below or above a certain radius.
Min-Max Distance from planet is a space spawn type that spawns you outside the gravity of a planet a certain distance. If Max distance is not specified or is left at 0, it assumes infinite. If min distance is set to 0 or not set, it can spawn you right at the edge of a planet's gravity. This means that if you set Min to 0 and Max to 1, you will spawn a stone's throw from the planet's gravity. One step outside your ship and you get sucked in.
Spawn Type would allow 3 different values. "Planet" "Space" "Both". If Planet is specified, you will always spawn within the planet's atmosphere using the filters specified. If Space, it will ignore all planet related values and spawn you somewhere in space using the space values. Both, would allow it to spawn anywhere assuming the values are met.
Now if you were to add Asteroid spans to this and allow people to spawn on an asteroid's surface, you can add "Asteroid" spawn to the Spawn Type, and switch both to "PlanetSpace" and add "all". Or perhaps it would simply just be better to keep your current <usefor> options and we can just set true/false in all of them.
Planet Files, could specify whether the planet can be spawned on, so a modder that releases a world can add a setting to make it spawnable or not. If not, it is ignored in the checks.
A modder can override this value when he opens up the world SBC file and finds that value to switch it from false to true or visa-versa before he uploads his world for people to download and play. Such as if someone set Jupiter to false when I created my world and added their planet to my world and I wanted it to be spawnable, I could simply go toggle it to true before I upload.
Now, I've seen in a few topics already that people are demanding the ability to specify a -specific- spawn location on a map. We should probably appease them so they stop whining and give them a way to do that.
In the respawn ships file, we could specify some values to allow this;
<SpawnLocationType>Exact|Near|Within|Filters <PositionAndOrientation> <Position x="0" y="0" z="0" /> <Forward x="0" y="0" z="-1" /> <Up x="0" y="1" z="0" /> </PositionAndOrientation> <WithinRangeKM>Int <SpawnIfBlocked>BoolIf Exact, ships with this set will check Position and Orientation and spawn there if available, unless SpawnIfBlocked is set to true and then ships will spawn there anyway even if they clip into things and end up exploding.If Near, ships will find somewhere near Position to spawn
If Within, ships will spawn randomly within range KM of the Position.
If Filters, the spawn ship will use the spawn filters instead of the positions and orientations.
There's also been some requests for Random spawn, which would be nice too.
Select a ship in the menu, and click Random Respawn will do its same checks and spawn at some random location on -any- of the locations that meet its criteria. Even if you selected the EarthSpawnShip, and you select Random on it. It will re-run the checks and spawn on any planet that meets its spawn criteria. You can also add <RandomRespawnOnly> to respawn ship SBC and the ship will appear in the list as a spawn ship that has no planet, and will respawn randomly using its filters. "Respawn" in the image would be greyed out on this ship, and only "Random" would be clickable.
Lastly, we can add some modifiers to spawn ships, like <SpawnWithInventory> to spawn a ship empty or with the inventory it was uploaded with. <SpawnPowerPercentage> will spawn a ship with all of its batteries at a specific percentage. Specifying -1 will use default uploaded power. <SpawnTankPercentage> will fill the Hydrogen and Oxygen tanks (if there are any) to a specific percentage, again -1 will use default.
Finally, we can also add <ApplyRandomDamage> to apply a specific number of damage to the ship hull blocks. 0.2 would be 20% damage to the hull. I'm not sure how we'd make this work without breaking things entirely however, perhaps making it so that no block can be destroyed by the random damage, and any blocks that have terminal functions can not be damaged beyond their functional line if you decide to apply random damage to more than just the hull blocks.
Should probably also add the option of <TemporaryInvulnerability> to make a ship invulnerable for 5 seconds upon spawning. This ensures that it can survive landing on any planet if you were to spawn slightly above the ground and wheels were no longer invulnerable.
I've seen a few topics on this already, I just wanted to provide some options no one else seemed to cover, they all only wanted exact spawns instead of more filters and wanted it inside the SBC files of the prefabs rather than the respawn ship file its self.