1. Stationeers
  2. News

Stationeers News

Hotfix v0.2.5906.26015

This hotfix resolves three issues:
  • Error spam on death
  • An error when starting dedicated server
  • Aimee causing error in multiplayer
  • Fixed exploding canisters not destroying terrain


Change List
  • Fixed Clients would get interaction locked when picking up an Aimee.
  • Fixed Aimee Animation update was not getting formed correctly causing any Aimee on a server to break the bite-array de-serialise function and de-sync clients.
  • Added check to major update popup to not appear on dedicated server
  • Fixed error spam on respawn due to missing null check (thank you tom_is_unlucky)
  • Fixed Explosions from Canisters, Furnaces, Rocket and Trader collisions not digging out terrain.

Hotfix v 0.2.5904.26009

[p]This fixes the missing map motherboard recipe.[/p]

Biggest Update Ever

We believe this major overhaul of Stationeers was a necessary investment to help the project reach the wider audience it deserves. However, bringing this update to you meant taking a huge risk: pausing our regular 2-3 week updates. This has a direct financial cost, as player numbers and revenue taper off immediately without them. This project has always been more than just a job; it's taught us so much about development and, most importantly, how to build a meaningful relationship with you, our community. We've always strived to be transparent, and you've repaid us by being incredibly active and supportive. We believe this update can bring in many new players and this is where you can make a huge difference:

Spread the word: Make some noise on socials like Reddit and recommend Stationeers to everyone you think might enjoy it.

Welcome new players: Continue being the engaging and welcoming community that you are.

Leave a review: If you haven't already, please consider leaving a review for the game!

Support us directly: If you want to support us in the most impactful way, please consider purchasing our DLC.

Simon Brown - Project Lead
Your support makes these updates possible


https://store.steampowered.com/bundle/2624/Stationeers_Complete_the_Set/
[hr][/hr]
The Terrain
[h3]We had to rewrite the terrain system to resolve some extremely buggy behavior as well as performance issues caused by even small amounts of exploration within the game. We did this by moving a lot of the terrain tasks to make better utilization of your GPU and have frontloaded a lot of the ram usage.[/h3]
There are a number of new or changed settings. Two of the major ones that have an impact on performance are Tessellation, Shadows, and Distance Shadows.


This Stationeers update completely redefines the how terrain looks, how the game performs, and how connected you feel to the world while playing. Pictures below will do the speaking, but the new terrain looks amazing, and blows the previous worlds away. The maps are now hand authored with meaningful thought put into kilometers of expanses to explore. Yet at the same time, with this new approach performance has increased, terrain hitching has disappeared, and save files are a tiny fraction of what they used to be.


[hr][/hr]
A New Look

The terrain is rendered with a completely new material that supports a range of features. The largest improvement is the ability for multiple sets of textures, representing multiple voxel types, to dynamically blend together. This is leveraged in many different ways and is a powerful tool for creating new and interesting planets. For example, on Vulcan there’s glowing rocks around the lava, while on Europa there’s a thick layer of ice and snow contrasting the black rock that lays beneath.



Regions

The maps are layered with regions that are used for different things, including names to help you become familiar with the maps and navigating. Additionally, points of interest add flavor, and more functional things such as deep mining regions and playarea bounds.



[hr][/hr]
View Distance

The new terrain system can render kilometers of voxel landscape. Multiple voxel types can create mountain vistas with contrasting rocky peaks and snow layers. The voxel system also allows us to create several layers of perfectly integrated LoDs of decreasing resolution. With the old system the view distance was limited by the culling system and terrain loading requirements. This previously resulted in a short terrain rendering distance which was stitched together with a very low resolution distant terrain mesh.

Looking about 1.5km along the mars canyon

[hr][/hr]
Underlying Data Structure

At the core of this update is the shift from a 8x8x8 voxel chunks to a voxel 'octree'. While the old system required data for every single voxel, data in the octree is only present where it needs to be. Large solid underground or open-air areas result in very little data needing to be stored. Only where there is actually complex topology does the data storage get more dense.

Multiple data structures are used to achieve the final terrain while avoiding performance problems. The world voxel data, which is a fixed size in memory and never changes allows for quick access due to its static nature. This is combined with another ‘delta’ octree, which starts empty and records the changes in the terrain. When the terrain is modified, we only dirty the delta octree. When we render or interact with the terrain we read first from the delta octree, and if nothing is there, we read from the read-only world data. Additionally, ore veins are now defined in their own tree-like data structure to not dirty the voxel structure unnecessarily. This provides us with definitions and controls to make them generate in continuous structures that subtly make mining different ores feel unique.

A visualization of how an octree segments the data

[hr][/hr]
Moddability

A foundational goal for this overhaul was to make the entire world-creation process moddable and data-driven. We built a toolchain that allows anyone to create a world without ever needing to open the Unity game engine editor. We used this same process for our official maps; assets were generated in external tools and then imported directly into the built game. This opens the door for the community to use free tools to create and share entirely new worlds. However, be aware that generating a world is a memory and CPU-intensive process, so powerful hardware is recommended for it to complete quickly.



[hr][/hr]
Worlds With Meaning

We’ve always wanted Stationeers to invoke a sense of exploration. Landing on a hostile planet and needing to construct systems to stay alive makes the planet the core antagonist. However, the previous terrain system just wasn’t up to task, as we discovered with our attempts to make Loulan an interesting place. Greater stress placed on the terrain and exploration would functionally remove performance that was needed for the base game. But with the new approach to world creation, we had the ability to make each map much more its own character.

Instead of the map being generated from random noise, each mountain can now feel unique. When you travel, you get a sense of position, and recognize far away features as points of reference. There are now vast frozen lakebeds, map dividing canyons, or towering ridges for the player to see and traverse. Additionally, we’ve used the opportunity to create biome like regions, named points of interest, and unique areas with ore distribution changes. This all contributes to you feeling much more connected to the map, and actually feeling like you are going somewhere else when you travel.

[hr][/hr]
The Maps

We needed to redesign each of the planets in this new paradigm, but we didn't want to lose what made the old worlds unique. Rather than trying to replicate any specific elements of the old terrain properties, we used the mood that the old planets invoked to define the baseline for the new planets. Instead of trying to cram too much into one map, we made each world’s terrain interesting, believably consistent. The choices of terrain features didn't have to be the definition of the planet, since there are so many intriguing map ideas for us to make. This decision allows us in the future to create even more maps for planets without having to completely change what already exists.

[h2]Mars: The Canyon[/h2]
We identified early on that one of the things that made the worlds feel different was the silhouette of the horizon. For Mars we wanted to maintain its characteristic rolling small hills that build into larger ones. With the new voxel types we were able to give it rockfaces and cliffs that gives it an open epic vibe. On of the test maps we used initially was a height scan of the Grand Canyon which we really liked and we decided to integrate a massive canyon into the Mars map as well.



[h2]Moon: Great Mare[/h2]
The Lunar map was the first map we tackled and felt like it was an easy choice as there was not a lot of unknowns. We knew we wanted it to be a relatively flat surface cluttered with craters. To make it more interesting the map is set on the edge of a mare with some dramatic height elevation that cuts across the map.



[h2]Mimas: Impact[/h2]
We considered the old Mimas felt a bit like a ‘Moon 2' but were not going to just replicate the moon for the new one. At its core it’s still a crater-ridden terrain but Mimas's point of difference is dramatic craters that rise much further up, and it features a crater so large that you barely know you’re in it if you’re standing near the center.



[h2]Europa: Colosseum[/h2]
This is an example of us taking a dramatically different route. Europa is completely covered in snow with rocky, exposed mountainous ranges. Initially we wanted to create some areas that were representative of the original Europa with massive ice spikes, but it did not feel right and was hard to make work technically. This was a good example of us working to the limitations of what we built and playing and iterating with the world building team until we were satisfied. We had an awesome time playing on Europa for over two weeks and we only saw a fraction of the map.



[h2]Venus: Miasma[/h2]
When looking at the old version of Venus the core feeling was best described as oppressive. We leaned into that with steep, towering, hostile ridged mountains permeating the map. The only respite from these mountains are the occasional shallow basins with toxic looking terrain colors, as well as dried up sulfur flats.



[h2]Vulcan: Foundry[/h2]
The old Vulcan map was probably the most unique of the old planets and invoked a feeling that we wanted to fully capture in the new map. Everyone on the team felt that it was important to get this one right, so we slowed down and decided to expand our world building feature set to allow for more interesting lava and the ability to add fractures. The map itself went through many iterations until we landed on a craggy landscape covered in fractures and giant volcanoes. The lava means you can’t dig down too far, while the hostile landscape and environment make it hard to traverse on mining missions.



Out with the Old

Our previous terrain system had a critical flaw: it never unloaded parts of the world from memory. The more you explored, the more RAM the game would permanently consume, leading to unavoidable performance degradation. This functionally limited how far you could travel before the game became unstable. This core inefficiency led to other problems, such as bloated save files with long load times and noticeable in-game 'hitching' when actions like mining or explosions occurred.

Creatively, the system was a dead end; while the worlds were procedurally-generated, they were also homogeneous, with almost no meaningful variance. Traveling in any direction presented more of the same landscape, which limited the feeling of true exploration and prevented us from creating the unique, authored experiences we envisioned.



[hr][/hr]
New Save System

The old save system was often described as unintuitive. It had confusing components, such as the backup system, which didn't always behave how people expected. A single save file misunderstanding could ruin hours of work and sour a day-long play session. So, there are two main new concepts to understand about the new save system - save files are now compressed into a single .save file and the save file structure has been changed to be a lot clearer.

The different kinds of saves we have are:



The save menu has been significantly updated, and each of these save types are displayed visually differently in the expanded save menu, to help you better understand your saves. In normal practice when restarting the game, you don't need to even expand this advanced save information, and just pressing the load button will continue your game.



[hr][/hr]
Save Transformer

With all the changes to the terrain and save systems all previous saves are broken. The community has already created various tools for porting your old saves. Here's a link to JacksonTheMaster's(Discord Handle) tool. There's also a workshop mod that you can find from this website.

Stationeers Save Transformer by JacksonTheMaster



[hr][/hr]
Multiplayer
[h3]We highly recommend not connecting using Steam P2P for multiplayer as it can cause desyncs and is not nearly as reliable. If the game tries to connect via Steam P2P you will be warned in game.[/h3]
A major cause of client-side hitching was fixed: a bug that caused unnecessary waiting for atmospheric network updates. In our tests on large bases, this eliminated a 20-30ms frame spike that was occurring twice a second.

You may have caught EJ playing Stationeers with up to 20 players recently. Check out his Twitch here.

Beyond this, we made dozens of small changes and fixes that massively improve the multiplayer experience. Connecting to and disconnecting from servers is now much smoother and more reliable. During our internal playthroughs, once we had made these improvements, we regularly had up to 10 players online at once without any issues.

[hr][/hr]
Community Walkthroughs

Three excellent walkthroughs using our tutorial system (Airlock, Smelting, and Manufacturing) made by community member, BigFootMSR(with his approval), have been officially integrated into the base game. Give him a big thanks for helping explain some of the more advanced parts of the game to new players.

[hr][/hr]
Project Clinic Improvements

At RocketWerkz one of the most important things we do is play our games. Once we had our first new terrain complete enough to play, Europa, we stopped our regular development for over two weeks to simply play. Playing the game the same way as customers allows us to see where the game actually needs work. This is the core foundation for what we call project clinics. So, besides the Terrain work we have done a massive amount of bug fixing, adding content, as well as hardening and improving systems.

Beyond bigger stuff like the save and multiplayer improvements bellow you can quick fire list of all the things we’ve added or changed:

[hr][/hr]
[h2]Move All Inventory Actions[/h2]
You can now hold Left Control while dragging to move all items in a container, or hold Left Shift to move all items of the same type.



[hr][/hr]
[h2]DensePool[/h2]
A common cause of stuttering in complex bases is the process of adding and removing objects from large lists. To solve this, we implemented a new high performance data structure we call a DensePool. This system uses a "swap and pop" method, ensuring that our lists of objects are always kept tightly packed and efficient. We've refactored nearly every major system in the game to use these DensePools, resulting in a significant reduction in stuttering and memory usage, especially for large bases and busy multiplayer servers.

[hr][/hr]
[h2]Multi-block Pipes and Chutes[/h2]
Something that has been long requested, and during the construction of a big and spread-out base we once again saw a need for long pipe segments. While this is handy from a station construction point of view, it significantly helps reduce the number of things in the world which has a non-trivial performance impact. We then expanded this to also include chutes, which have a higher performance cost than pipes.



[h2]Logic System Upgrades[/h2]
For our dedicated IC10 architects, this update delivers one of the most significant expansions to the logic system yet. We've focused on making your code simpler to write, more powerful, and far more intelligent, allowing you to create robust scripts that can dynamically adapt to their environment without throwing errors.

[h3]Streamlined Code with Direct Addressing[/h3]
We've fundamentally streamlined how you reference devices. Previously, to read a variable from a specific device, you often had to load that device's ID into a register and then use a dedicated instruction like ld.

Now, core instructions like l (load), s (store), and all device branching instructions have been upgraded to support Direct Addressing. This means the instruction itself is smart enough to know if you're giving it a register, a device screw (like d0), or a raw Device ID. In short, you can skip the middleman, which makes your code cleaner and more intuitive.

Here's a practical example:
# THE OLD WAY
# You had to use 'ld' after moving the ID into a register.
move r0 123456789 # Move the Reference ID of a switch into r0
ld r1 r0 Open # Load the 'Open' state

# THE NEW, SIMPLER WAY
# The 'l' instruction now does it all.
# You can use the ID directly, or an alias.
alias myswitch 123456789
l r1 myswitch Open # Load the 'Open' state directly


[h3]Smarter Scripts with Dynamic Device Checking[/h3]
We're also introducing powerful new branching instructions that allow your script to ask a device a question before trying to interact with it: "Can this variable even be read?" or "Is this variable writable?". This prevents your script from throwing an error and halting, allowing you to create universal scripts that can intelligently check what a device is capable of.
bdnvl   
Branch if Device Not Valid to Load: Jumps to the specified line if the logicType on the device is not readable.

bdnvs   
Branch if Device Not Valid to Store: Jumps to the specified line if the logicType on the device is not writable.

[h3]New Tools and Helpers[/h3]
We've also expanded your creative toolkit with several new instructions. You can now create smooth value transitions using LERP (Linear Interpolation), and perform highly efficient data packing with EXT (Extract Bit Field) and INS (Insert Bit Field).

To assist with complex calculations, the Universal Gas Constant (rgas) and Tau (tau) are now available as built-in constants. In the IC Editor, these constants and all your variables will now display their live numerical values in yellow text, making debugging much easier.

[hr][/hr]
[h2]A New Lander[/h2]
A lander replacement has been implemented that replaces the old one and bring it in line with the drop pod you spawn in.



[hr][/hr]
[h2]Planetary Mapping System[/h2]



A new gameplay loop has been added that allows you to scan and view the entire map. By building a Map Motherboard and connecting it to deep scanners, you can launch a rocket into orbit to slowly reveal the planetary surface on screen. This also allows you to toggle the deep ore region overlay, so you can find new regions with different deep ore mixes.

[hr][/hr]
[h2]New Computers[/h2]
To better display your new planetary discoveries, two new computer variants have been added: a standing and a wall mounted version. These provide an excellent canvas for the new Map Motherboard, which connects to your rocket's deep scanning head to reveal the planetary surface as it orbits.



[hr][/hr]
[h2]Rocket Gas Filtration Kit[/h2]
This new machine is designed for harvesting resources directly from the atmospheric gas clouds of planets like Jupiter. To support this, you'll find new cloud mining nodes appearing on the space map.



[hr][/hr]
[h2]Large Rocket Tanks[/h2]
Two new large landing pad tanks have been added: a Gas and a Liquid variant. Each is 3x2x4, and holds 3000L.



[hr][/hr]
[h2]Wide Airlock[/h2]
A new, fully functional double-width (2x1) airlock, constructible from the Airlock kit.



[hr][/hr]
[h2]Logic PID Controller[/h2]
A PID (Proportional-Integral-Derivative) controller is a powerful tool for automation. It constantly works to minimize the error between a desired setpoint and a measured variable, making it perfect for tasks like precisely regulating temperature or pressure.



[hr][/hr]
[h2]Compact IC Housing[/h2]
A new, smaller IC housing variant with combined power and data connections for tighter placements.



[hr][/hr]
[h2]Hard Hat[/h2]
A new helmet that contains a built-in light.



[hr][/hr]
[h2]Ice Crusher Rework[/h2]
The Ice Crusher has been significantly reworked to be more intuitive, especially for new players who found the old version's lack of feedback confusing. It now features a new status panel that clearly displays what the machine is doing and any error states, a color-changing heating indicator light for at-a-glance feedback, and a physical temperature dial for direct and easy control over the heating process.



[hr][/hr]
[h2]Cryotube & Sleeper Rework[/h2]
The Sleeper now features a status panel that clearly shows how it works and if it's functioning correctly. The Cryotube has received a more significant overhaul and now requires a piped supply of cooled Liquid Nitrogen to operate. To make this new requirement clear, it includes an improved info panel that not only educates you on what's needed for it to function, but also displays critical medical data, including the organ damage values of any occupant.



[hr][/hr]
[h2]Tracker Cartridge Upgrade[/h2]
The functionality of the GPS Cartridge has been merged into the Tracker Cartridge. The old GPS Cartridge is now deprecated.



[hr][/hr]
[h2]LED Display Upgrades[/h2]
LED displays can now be set to show units (Kelvin, Celsius, Pa, etc.) and can display short strings of text sent from an IC.

[hr][/hr]
[h2]High-Speed Mining Drill Buffs[/h2]
The mineral drill's speed boost has been increased from 120% to 150%, and the ice drill's boost has been increased from 20% to 50% to better justify their high energy costs.

[hr][/hr]
[h2]Improved Computer Interaction[/h2]
You can now use Alt + click on computer screens, which makes UI interaction much smoother. This also allows you to open the IC editor while holding the laptop in your hand.

[hr][/hr]
[h2]Emote Commands[/h2]
You can now express yourself in-game with a range of new facial expressions, controlled via the emote console command. This system also includes automatic expressions for 'Death' and 'Unconscious' states for added immersion. The available commands are:





[hr][/hr]
Known Issues
  • Some explosions, such as canisters, do not destroying terrain
  • The use of dr in IC10 scripts is not fully supported yet
  • Some rich ore deposits are not working correctly on the moon map


[hr][/hr]
Pre-Terrain Branch

[h3]We've locked of a branch on steam called 'preterrain'. You'll always be able to go back to this if you choose.[/h3]
Change Log 0.2.5903.26007

[h3]This post is too long to display the change logs so we have create a pastebin containing all the changes:[/h3]
[h3]pastebin.com/LsbVNS7X[/h3]

Rocketwerkz's CEO alleges Unity are threatening to revoke studio's licence over apparent personal licence usage


DayZ creator Dean Hall is alleging that Unity are threatening to revoke all licenses for workers at his current studio Rocketwerkz, the team behind Icarus. The developer made this claim in a lengthy post on Reddit saying that Unity are doing based on "bogus data about private versus public licenses." Hall shared what he claims is an email from Unity dated May 9th where they explained that the Unity Compliance Team has flagged Rocketwerkz's account as according to their data, the developer "currently [has] users using Unity Personal licenses when they should under the umbrella of your Unity Pro subscription."


Read more

Big Changes Coming: Terrain Preview, Melting Ice, Modding, & Localization

This update features some updates to the logic system, especially around traders, as well as some fundamental changes to the modding system, localization, and some nice new features, including being able to melt ice with your welder, as well as a lot of bug fixes.

It's been a while since the last update, and the reason for this is that we've been working hard on the new terrain system. While it is not included in this update, it will be available on the beta branch shortly after this update goes live.

Preview: Massive Terrain Upgrades (Beta Branch Coming Soon!)


The main goals of the new terrain system are to allow us to have more interesting play areas in hand crafted worlds, a better-looking terrain by reworking how it is being rendered as well as better voxel data for a much smoother terrain.

For now, here are some images and photos. These are test 4km x 4km maps, the final ones will be different and will be 8km x 8km. Keep in mind that these are all work in progress and things will be changing fast.

Walking across 1.5km across moon like crater. One of about 5 similar craters on this test map

The terrain system has been rewritten from the ground up
New level of detail system for distant terrain


Looking across kilometres of terrain on a test map


An alien world


Melt Ice Instantly with Welding Tools




You can now melt ice directly using the welding torch or arc welder. Simply aim at a stack of ice to start the melting process. This feature should make handling ice significantly easier, especially in early-game resource management.

[hr][/hr]

Enhanced Automation: Trader Logic & Circuit Improvements




We've expanded the capabilities of the logic system, especially around trader automation and data display. The Medium Satellite Dish now includes an internal stack allowing integrated circuits to read detailed information about traders, their available goods, and even gas trades. Additionally, the Hash Display Circuitboard has a new Mode setting, enabling easy switching between Prefab and Gas/Liquid data, all controllable through your integrated circuits. These changes significantly boost the potential for automating complex trading setups.

[hr][/hr]

New Achievements




Several new achievements have been added, offering unique challenges. Here are a few highlights:

  • The Spice Must Flow - Mine 10,000 units of Cobalt Ore.
  • And Yet It Moves - Track celestial bodies using a ground telescope at full alignment for 10 cumulative minutes.
  • Some Assembly Required - Write your first integrated circuit script.
  • Stack Overflow - Write data to the internal stack of another device via integrated circuits.
  • Soot Happens - Survive an Ash Storm on Vulcan (outside creative mode).
  • Why Is It Still Mark Watney? - Survive for 30 days consuming only potatoes or baked potatoes.
  • Syolnet Green is... Plants! - Harvest plants 1,000 times.
  • Khajiit has wares if you have coin - Generate over ten thousand revenue from trading.


We've also hidden a few secret achievements for you to try and uncover!

[hr][/hr]

Localization Improvements & Multiplayer Connection Fix




We've made significant improvements to localization, addressing numerous translation and display issues - especially in Simplified and Traditional Chinese. Additionally, we've resolved a serious multiplayer issue that previously prevented connections for players with extended or special characters in hostnames. This should drastically improve connectivity for our international player community.

After this going live on the beta branch the community jumped into action and translated almost everything available meaning that ~99% of the XML data has now been translated for Simplified Chinese. We want to build a pipeline that will automatically include community localization but in this case they have been manually added to the build. A big thank you MRhythm for coordinating this!

[hr][/hr]

Expanded Modding Flexibility


We've enhanced our modding framework, allowing mods to easily overwrite existing worlds, difficulty settings, and start conditions without causing conflicts. Additionally, modded content will now be clearly indicated in-game, making managing your mod library much simpler.

These changes will break a lot of mods. However, it fixes a lot of long-standing issues, some that have been there since launch.

[hr][/hr]

Your support makes these updates possible


https://store.steampowered.com/bundle/2624/Stationeers_Complete_the_Set/

[hr][/hr]

[h2]Change Log 0.2.5499.24517[/h2]
  • Fixed missing recipe for gas mask
  • Fixed a few nullrefs which were stopping the main menu from showing up after failing to join a game.
  • Fixed a few terraforming exceptions on joining a game.
  • Fixed clients can't connect after engine upgrade.
  • Commented out some terraforming code (temporarily) which was throwing exceptions.
  • Fixed error spam when looking at drinking fountain when it has no pipe connected to it.
  • Added very basic saving and loading for new terrain (currently not async).
  • Fixed minables not generating deterministically in new terrain.
  • Added some more debugging for tracking terrain voxel densities.
  • Tweaked voxel debug position for new terrain.
  • Made terrain generate around point function generate in a cube instead of a sphere.
  • Fixed some chunks not generating if they are on the very edge of the world resulting in some holes in the terrain.
  • Removed mineable type from octree data. This will be stored elsewhere.
  • Fixed new terrain not saving in backups or autosaves.
  • Changed new terrain flag to be a symbol definition and added it 'Stationeers > Symbol Definition' menu
  • Fixed nullref when exiting tutorials.
  • Added Models and scripts for future content.
  • Added gameplay scripts and data classes for deploy action.
  • Added prototype deploy action to Rocket Space Map. This is in preparation for rocket deploy missions.
  • Allowed new terrain chunks to be different resolution.
  • Fixed possible nullref when mining on new terrain.
  • Fixed switchgrass had two mature stages.
  • Added the ability to melt ice using the welding torch or arc welder. This will call smelt on the stack of ice once every 0.5 seconds.
  • Fixed locker kit having the wrong default option selected. LastSelectedIndex was being serialized into the prefabs so it may have been affecting other kits as well. This field has now been marked as nonserializable so all kits will use their 0th constructable as the default.
  • Added Pneumatic Mining Drill to the Mining Supplies Package
  • Fixed low quality, pixelated lens-flare for the road flares
  • Fixed station batteries, small and large, not requiring frame support
  • Removed a couple of storm sounds that were too tonal.
  • Added more aggressive distance cut off for wind turbine audio.
  • Changed Reduced audio voice limit as a possible fix for audio stuttering and volume issues noted in larger bases.
  • Fixed SensorLenses would get burned by fire when worn while helmet was closed.
  • Fixed Glasses would get burnt when helmet slot was closed.
  • Fixed the broken build state of the Area Power controller being visible in the blueprint when placing it.
  • Changed audio voices back to 64.
  • Lowered large transformer reverb send.
  • Changed Some ambience audio clips to load into memory compressed instead of streaming from disk as the streaming thread was getting overwhelmed in larger bases.
  • Changed Rocket Avionics, Rocket downlink and rocket batteries to be single build-state devices. Build-states on these single grid devices was inconsistent with other devices in the game.
  • Tweaked priority of rocket engine sounds.
  • Fixed issue with filter degradation in the FilterMask when not being worn
  • Added work in progress chunk pool class and wrapper class. The intention of this pool is to be a normal object pool except allowing for if a chunk at a specific position is requested, and one already exists that has been used for that location and level of detail, it will be returned instead so that it does not need to be recalculated
  • Fixed Pressure Regulator and volume Regulator setting tooltip not showing input setting for back regulators.
  • Added chutes to meson scanner rendering
  • Fixed Meson Scanner not showing burnt cables and burst pipes
  • Changed some rocket manufactory recipes to used steel instead of iron
  • Deprecated old heat-exchanger devices.
  • Changed OreScanner, MesonScanner & Celestial Scanner recipes to: 5 silicon, 5 Electrum, 5 Waspaloy.
  • Fixed Rocket Uplink buildState used cable coil heavy instead of standard cable coil.
  • Fixed storms not moving items on dedicated server.
  • Added Every 4 mine actions undertaken at an asteroid deposit will add 1 scan point to the location.
  • Fixed Rocket umbilicals revert to closed state on load.
  • Fixed Inworld liquid could be hidden under floors & liquid visualiser would sometimes clip through ceilings.
  • Added Confirmation panel step to delete node button on spacemap.
  • Fixed small typo in english.xml
  • Fixed thumbnails for pickaxe and emergency pickaxe
  • Fixed thumbnails for composite wall 1 and iron wall 1 being incorrect in Stationpedia
  • Changed Stationeer Difficulty now has a 1.5x distance Multiplier between spaceMap locations.
  • Added SpaceMapDistanceMultiplier value to DifficultySetting. This Setting does not apply to the Distance to orbit.
  • Added the ability to close the large fridge from the inside of the door. The trigger collider used on the outside now extends through to the inside.
  • Added beds suspending life functions for humans. The ILifeSuspender interface now requires the class to implement IsSuspendingLife, instead of IsPowered, and leaves it to the implementing to decide what the requirements for this are.
  • Added automatically changing name from Recruit to the players steam name if it is found when loading the player cookie
  • Added new 4x4km grand canyon map for internal testing the new terrain system. It is currently not accessible in the game and will be enabled at a later time.
  • Added first pass on terrain chunks loading near dynamic things.
  • Made mineables generate correctly around player as chunks are created.
  • Added first pass on lod for distant terrain chunks.
  • Changed the display name of Insulated Liquid Tank Big to Liquid Tank Big (insulated) and Insulated Liquid Tank Small to Liquid Tank Small (Insulated) to bring the naming convention more in line with the Insulated Tanks.
  • Removed Duplicate ItemKitRocketBattery prefab.
  • Fixed mining was doing unnecessary work on zero density chunks.
  • Fixed some terrain chunks leaving small bits of unmineable terrain.
  • Fixed mining performance issue on large terrain sizes
  • Fixed nodes not collapsing correctly when mining on new terrain.
  • Made various improvements to chunk dirtying logic to remove allocations and unnecessary lookups.
  • Fixed mining new terrain doing unnecessary work subdividing nodes when sampling density.
  • Potential fix for T-Ray scanner throwing exceptions
  • Updated wrong texture file for Sugarcane plant.
  • Fixed Fragment Handler exception when de-serialising atmospheric data on joining a server with a very large base.
  • Changed reduced reverb on loud distant objects.
  • Fixed Meson Scanner throw exception trying to render an invalid batch.
  • Changed Gas Generator Audio Reverb setting.
  • Fixed "Setting linear velocity of a kinematic body is not supported" spamming in dedicated server console.
  • Fixed string Format error spam that could occur when looking at a pipe atmosphere or any other atmospherics device when the pressure inside was greater than 1GPa.
  • Updated Build a basic power setup helper hint to match Europa power supplies start conditions.
  • Fixed apc still works when destroyed
  • Fixed APC reversed blueprint
  • Fixed incorrect build-state tools on composite window shutter connector
  • First pass on improved lod system for new terrain.
  • Disallowed mining below bedrock level on new terrain.
  • Fixed can't close manual hatch when on a ladder
  • Made mining work again on new lod meshes.
  • Changed lod prefab so only lod0 meshes will have a mesh collider. This should speed up generation for distant lod meshes.
  • Fixed Some atmosphere grids get stuck with high winds on clients.
  • Fixed medium shelf blocking grid extending too far out from the front of the shelf
  • Removed old chunk object and replaced it with a non monobehaviour chunk.
  • Made mining work with lod meshes for new terrain.
  • Changed lod lookup to be an array of lookups, one for each lod level. This allows lod objects of different levels to exist at the same point which fixes a bunch of problems when multiple dynamic things are requesting lods of different sizes.
  • Improved performance of checking loaded/unload lod areas.
  • Added a min and max terrain height to trim out unnecessary lod objects far above and below the terrain bounds.
  • Fixed editor script being included in the build causing it to fail
  • Enabled smooth normals for angles under 30 degrees on new terrain
  • removed smooth normals for new terrain
  • Changed all power tools to consume a standardized amount of power (1000 joules) on use. A property was added (BasePowerUsage) that can be overridden on subclasses as necessary.
  • Added first pass of stack on MediumSatelliteDish. Added a small stack to the dish along with template for some instructions. These will allow the dish to read and write extended data associated with the current communicated trader. This will be able to be used to more easily automate trader contacting using the internal stack system on the dish itself.
  • Optimised collider setup on large Wind turbines. Colliders on the rotating blades was causing the physics tree recalculations every fixed up-date. Fixed update is now 1ms faster on large Europa playtest base.
  • Separated occlusion testing and rendering for mineables for new terrain system and made it allocation free. Occlusion testing is now done once per second but this is a first pass and will be made much smarter
  • Fixed Ice will now melt when put into DynamicGasCanister slot when the canister is empty.
  • Added a cached vector3 position to chunk objects alongside the Vector3Int to reduce the large cost of casting these every time we submit the mineables to the renderer
  • Updated the new mineables code to not use dictionaries as this was costing a lot to look up.
  • Added checking for mineable occlusion to the player moves event so that we are only updating the mineables when required while the player is moving around
  • Added an event that will run when the current player moves a about a chunks worth of distance
  • Added an AllTick that runs alongside ServerTick or ClientTick
  • Fixed AllTick being run every millisecond
  • Added first pass on pooling system for lod meshes.
  • Changed Ambient light mode from trilight to skybox when in game (it will remain as trilight mode in main menu scene and new world scene).
  • Changed added easing to transition in and out of eclipse so the change is less sudden.
  • Changed skybox settings during eclipse. Europa skybox will now experience a dawn moment, the sky will lighten, although some stars will still be faintly visible.
  • Changed Ambient Lighting settings during eclipse. Eclipse on Europa will still be dark, but terrain, mine-ables and structures will still be faintly visible.
  • Changed reduced the default ambient light max intensity value from 0.36 to 0.3
  • Fixed Default value for ambient light not being set on planets with no atmospheric scattering. This resulted in it retaining the default unity value of 800% an the terrain being very over exposed.
  • Stopped DynamicGasCanisters returning the relevant kit when being deconstructed after they have been broken. Created a new property inside the DynamicGasCanister script for getting the _hasBlown state.
  • Added TraderInstruction enum parsing to logic system.
  • Added second pass on internal stack memory for MediumSatelliteDish. Working implemenetation for TraderInstruction.WriteTraderData. This is written with the index to start writing at. Three instructions will then attempt to be written to memory, being the traders Id hash (its type), some trader meta data, and then some signal data. Third pass will feature implementations for filtering actual trade buy and sell data into the stack, not just meta data.
  • Removed temporary property from DynamicGasCanister left over from previous commit.
  • Made lod requesters remove themselves from lods correctly when destroyed.
  • Fixed RocketMotherboard required a connected rocket in order to open the map. The panel will now open with no valid rockets connected, but certain rocket specific fields will be blank/un-interactable
  • Changed layout launch mount nodes with relation to home planet nodes on the space-map. Launch mount symbol now appears laid over the plant and rockets travel "up" into orbit.
  • Moved some helper functions into a dedicated LodHelper class.
  • Fixed several issues where lod objects were being queued up for generation multiple times.
  • Fixed two dynamic location panels created for starting node when loading game with existing launch mounts.
  • Added Third pass of internal stack for MediumSatelliteDish. WriteTraderData will write three meta data memory to stack. WriteTraderBuyData will populate the stack at a index to a max count with buy data, WriteTraderSellData will do sales. This will populate the stack with their respective packed memory. Only working for trades that are items, currently, but this will change. Currently you can use filtering, but the filters are applied to everything. Intention is to change this to only use that since the last Write command, but that will come in third pass. Non valid (i.e. old) WriteTraderBuyData or WriteTraderSellData will be cleared when next tick is processed.
  • Removed apply queue for terrain mesh jobs as it is not needed.
  • Added ability to pre-populate lod pools.
  • Removed unused Obi Solver plugin as it was causing builds to fail.
  • Experimental fix for multiple concurrent clients joining causing multiplayer desync issues.
  • Prevented DynamicThings from taking damage while inside a parent slot that hides them. They still take damage if not hidden.
  • Added Gas Type trading to the MediumSatelliteDish Internal Stack. Now basic gas trades both buy and sell will be added to the internal stack. Their gas types will be condensed into a single bitflag that can be interrogated for gas types.
  • Added overlay text option for ImGuiDebugHelper.
  • Removed unused test lod requester class.
  • Added Fourth pass of internal stack for MediumSatelliteDish. Now have Buy and Sell Child prefab data loaded into the stack. Additionally Gas data is loaded into the stack as well. Filters are applied to child items as well. Now fully functional at interrogating trader inventory. Next change will ensure the filtering is local to that "block" of write instructions, allowing the internal stack to be segmented for multiple requests.
  • Added Fuel Mix and Air Mix GasType enums, as these are just a flag combination. They now have recognized sprite images as well. This means that the Hash Display circuitboard will recognize Air (Oxygen and Nitrogen) and Fuel (Volatiles and Oxygen) and display an image for that. Useful with traders.
  • Added Hash Display Circuitboard now has Mode, that is used with the new HashType enum, with both HashType.Prefab (default) and HashType.GasLiquid. Consoles now accept setting their circuitboard mode via the logic slot set/load instructions (ss or ls). This allows you to set a console circuitboards mode from IC.
  • Fixed Harvester contained coroutines. Moved to Unitask reducing potential for memory churn when TryPlantSeed or TryHarvestPlant was called via any IC scripts, which could be often.
  • Fixed DEFINE instruction would produce NaN as it was configured to not check Enums or other defines.
  • Cleaned up some of the achievement code a little, with some minor optimizations.
  • Added "The Spice Must Flow" Achievement for mining 10,000 Colbalt Ore.
  • Added "And Yet It Moves" Achievement for tracking celestial bodies using a ground telescope at full alignment for ten minutes cumulative.
  • Added support for stat based achievements
  • Added "Some Assembly Required" Achievement for writing a script to an integrated circuit.
  • Added "Stack Overflow" Achievement for writing to the internal stack of another device using an integrated circuit.
  • Added "Soot Happens" Achievement for surviving an Ash Storm on Vulcan when not in creative.
  • Added "Why Is It Still Mark Watney?" Achievement for surviving for 30 days eating only potatoes or baked potatoes.
  • Added "Syolnet Green is... Plants!" Achievement for harvesting 1000 times from plants.
  • Added an Achievements command for debugging achievements.
  • Optimized the Update100MS and Update1000MS method caching as well as made their assessment automatic, meaning that those using the methods in future won't have to also remember to update the "Is" method.
  • Added "Khajiit has wares if you have coin" achievement for over ten thousand revenue from trading.
  • Added a hidden achievement.
  • Removed steam check before awarding achievements. This check was redundant. It also generated a lot of memory garbage, as it was looking through all steam achievements each time. Additionally more minor cleanup to achievement code, including auto generating more of the backing dictionaries. This makes it much easier to add new achievements.
  • Added three more hidden achievements.
  • Fixed use of Allocating Physics commands that have been replaced with non allocating version. Note: this will limit explosions to interacting with a maximum of 1000 colliders. This is quite a lot. Previously explosions were causing a lot of memory garbage to be cleaned up. Now it will not cause this, but there is a hard cap of 1000 things being interacted with. This might need some refining further.
  • Removed Old terrain lod when new terrain flag is active.
  • Changed LOD settings to increase render distance of new terrain from (4,4,4,4,4) to (8,8,8,8,16). This pushes rendered terrain out past the far clip plain distance.
  • Reverted change to terrain job processing to ensure we wait to finish jobs before the next frame.
  • Added difficulty setting for calm weather period multiplier. This will, if set, multiply the initial calm weather grace period at the start of a game.
  • Added difficulty setting for Achievements. Modders can set or use this with any modded difficulty settings. All difficulty settings work for achievements except for the "creative" difficulty setting, which by default is "disabled".
  • Removed duplicate IThreadedWorker class.
  • Changed LodObjects that have requesters to have a 10x load value.
  • Fixed thread profiler not working with terrain threads. use profiler enable command to profile terrain threads.
  • Added "spherising" to new terrain shader
  • Added ability to have voxel type in octree. Not fully implemented yet or used for anything but the option is there and can be used for multiple things
  • Added calculating normals from voxel data to achieve smooth normals
  • Made ProcessJobs wait for executing lod object jobs as soon as ExecuteAll is called. This may be less performant but does fix error spam and a few strange issues where the dirty indices array would not be emptied after all jobs were finished leading to some lods not being able to be dirtied again. More improvements to come on this.
  • Added various different data classes now receive what mod they are being loaded from as part of their initialization, allowing them to remember what mod they are from for later display.
  • Fixed the spawn item data in the new world process was very large text, using headers for the whole lot. Now they are sized the same as the rest of the text. Additionally there was a whole bunch of background image gore with how the UI elements were rendered, this has been cleaned up with icons to indicate better what can be clicked on and what cannot be.
  • Fixed the mod load order was being done in reverse. This needs to be checked, but it was very unintuitive. The mods were being loaded in the reverse order from what was displayed visually - probably confusing a lot of people.
  • Added image that shows over top of modded Worlds, Start Conditions, and Difficulty Settings. This means that you can see what content is modded or has been overwritten easier.
  • Added Difficulty Settings can now be overwritten with mods. If a mod is loaded, and the difficulty already exists, the mod will overwrite that difficulty setting instead of throwing an error and stopping as it currently does.
  • Fixed incorrect spherical effect variables on terrain2 material
  • Cleaned up the starting equipment list to make it more readable.
  • Added SortOrder attribute option to world settings, so that modders and others can sort the order their worlds will appear in the world settings list.
  • Added a yellow mod icon to the starting screens so you know if data is being overwritten or loaded from mods.
  • Fixed mods could not replace various things, such as worlds or difficulty settings. Confirmed that mods can now replace worlds, difficulty settings, and start conditions. You don't need these to be different file names either, the XML is very permissive. This should allow, now, the replacement of pretty much anything data wise in the game that in the past would throw errors (such as star maps).
  • Fixed modconfig.xml was being generated inside the executable folder, or trying to at least. This caused critical issues and wiped the mod order constantly, breaking mod loading for GeForce now users and lots of other people. But even if that had worked, the mod loading was broken anyway. Now the mod loading is done in the order displayed in the load order list, loading the "core" mod at the spot indicated. There may be issues with this that still need to be resolved. The modconfig file will now be generated in wherever save and settings files are generated.
  • Removed sever expensive memory allocations for new collections in the Lod requester logic. These collections are now cached and reused.
  • Changed LodManagers work loop to be state-based. The manager now goes through one step each frame. certain steps like applying the meshes or waiting for the jobs to complete will run over multiple frames to ease frame-time spikes.
  • Added caching of marching cubes object as well as the mesh object to the lod object to reduce allocations
  • Added back face rendering to terrain terrain. This helps a lot with terrain seams and should help us hide them in a naive way without the need to perfectly fix them in an expensive way
  • Moved consolidation of queued up lod changes to where job are assigned. This helps to fix missing lods in some instances.
  • Fixed Upright wind turbine data can't be read as the port is power only. Changed the port to be power and data. (Credit: Tsoleht)
  • Fixed Sun flare not showing through the glass of the StructureCompositeWindowShutter prefab.
  • Rewrote new terrain shader to fully support the required features and removed a lot of the unused features
  • Fixed rare null reference occurring when autosave is attempted during a specific phase of character death.
  • Lods will now overlap at lod boundaries to hide seams (wip).
  • Fixed Tablet not working until hands are swapped if it was in the left hand when the player loads a world.
  • Fixed VoxelTerrain.cs generating 50kb GC per frame due to multiple new array creations in the Minable batch rendering code. Refactored to use pre-allocated array and removed all GC allocations.
  • Fixed if statement formatting for previous commit
  • Changed OnNextDay to be specific function calls rather than a subscription delegate event list. This is much more readable and debuggable in the code, and reduces memory churn. Added the IOnEachDay interface that is checked against to make it easy to add classes to this. Entity was already using this kind of functionality so it has been migrated to this, reducing memory churn when instantiating new entities such as chickens and players.
  • Added a timeout on the capsule lander light. It will now stop working at the end of the first day.
  • Changed IAnimComponent to use a serializable base class and then cache it only when generating the base prefab. This means each time it is instantiated a GetComponentOnChildren does not need to be run, as this was always being run for everything thing when they were instantiated.
  • Fixed a serious potential issue that prevents joining or hosting multiplayer games with hostnames that may contain non-ansi characters. This potentially affected a number of users who are using different languages and their computers or the destination hosts were using an extended characterset. A new and more advanced system is used to get the current host ip, however this requires extensive testing. It may also fix some other hostname issues that players are experiencing.
  • Changed reduced the amount of the most distant terrain Lods as they were over the horizon.
  • Changed Mineables are now only rendered on LOD0 Meshes and on chunks that have a rendered mesh (i.e only mineables that are close to the surface are rendered)
  • Changed some VoxelTerrain functions and fields to be static.
  • Added Some profiling tags
  • Fixed LodMesh prefab not on terrain layer.
  • Changed tooltip when hovering over the handles of the CrateMkII from saying "Button1" to "Drag" to bring it in line with the DynamicCrate.
  • Fixed some text boxes contained illegal string keys and would cause exceptions if they were localized.
  • Added additional localization commands to assist with debugging and fixing localization issues.
  • Fixed a number of text renderers had no font switching occurring and did not have localized strings. More of this to follow.
  • Fixed a variety of font and localization issues with Simplified and Traditional Chinese (credit: MRhythm)
  • Fixed a massive quantity of localization issues due to missing calls for Localized font. This includes the Hash Display, trading screens, spawn screens, and others. (credit: MRhythm)
  • Changed LodObject helper class to be pooled. This reduced the amount of GC allocation when requesting and un-requesting terrain lods.
  • Changed increased the size of the LodMeshRenderer pools (the lower level lod pools now have a much larger starting count)
  • Fixed a performance issue with Objectpool class where returning an object to the pool could be very expensive for large pool sizes.
  • Cleaned up lod classes a little, made pooled mesh object use naming convention for pooled objects.
  • Moved the lod object pool to a new LodObjectCache class which will also hold and manage the lookup for currently active lod objects. This is because these two things are tightly coupled - getting/returning from the pool will add/remove from the active lookup.
  • Added additional checking for prefabs to the localization checkkeys command.
  • Fixed 42 missing strings for prefabs. (credit: NoName)
  • Fixed dedicated server build failure due to missing server specific imgui helper function definition
  • Fixed could spawn under terrain when terrain height at starting point was higher than 40m.
  • Increased distance of GetSafePoint for spawn raycast.
  • Removed unused debug draw on lodmeshpool
  • Fixed missing RW_Server check in localization.cs
  • Changed ImguiHelper class to be active when RW_Server defines is enabled. This should help prevent some dedicated server builds failing.
  • Refactored access to the terrain octree to be accessed only through the voxel terrain manager instead of directly accessing it
  • Fixed error spam when reloading into a world caused by pools not being correctly reset.
  • Changed lod object pools to have one pool per lod level.
  • Added back missing code to remove rendered mineables from a chunk when returning lods to pool.
  • Fixed a few instances where lods would render around dynamic things when they shouldn't
  • Reverted Imgui changes from rev24361 to test if they were the cause of steam build to failing to run.
  • Fix for Dedicated Server build issue.
  • Reinstated Imgui Change from rev24361 as it was not the source of build issue.
  • Changed LodManager now only moves off idle state when it has pending work to do.
  • Fixed Black seems at lod overlaps. Overlap meshes shadow casting is now disabled.
  • Made dynamic things request new lods after they have moved a set distance rather than when their chunk has changed.
  • Fixed rendered mineables not being cleared when leaving a game.
  • Removed unused TerrainManager class.
  • Added desired depth parameter for getting octree density. This fixes marching on higher lods not sampling corresponding higher octree levels resulting in very large seams.
  • Changed lod bounds to extend out into the next lod by one rather than back into the previous lod by one. Turning off shadows on the boundary is less reliable now as the next lod up will not always be higher so have removed setting of boundary indices for now. Will revisit this.
  • Removed the remainder shadow boundary culling code as it was no longer required.
  • Changed Liquid Particle solvers to have their game objects deactivated when idle. The particles had quite a high physics overhead when sitting idle in the scene. This will mean higher cost to physics system when water is spreading as the activation and deactivation of particles causes some physics tree re-calculations.
  • Fixed null ref when closing and then creating a new game.
  • Fixed an issue where Sounds triggered by interactables were calling play logic multiple times.
  • Fixed an issue where Looping sounds that were paused for concurrency were getting stopped.
  • Added Concurrency setting for wall light sounds. (on-going work to reduce number of virtual voices in large bases).
  • Fixed OnOff sound reversed for wall light.
  • Added Audio Concurrency Setting for Atmospherics Devices and Volume pumps to reduce number of virtual looping sounds on large bases.
  • Added AudioUpdate for things that need to change audio values on a regular tick. (this logic currently runs in UpdateEachFrame but can be moved over as an on-going effort to reduce update churn)
  • Changed Things that run updateEachFrame now have this cached on the prefab on prefab load (in the same way as 100ms and 1sec update is handled).
  • Removed some unused shadow changing code on the lod object.
  • Added TerrainSettings to world settings data for loading individual octree terrains with their respective settings and textures.
  • Changed Furnace audio to be distance culled. Added audio concurrency setting for furnace and arc furnace audio.
  • Changed Moved Furnace and character audio logic into audioUpdate.
  • Changed Audio Update does not run in batch mode.
  • Fixed a tooltip issue where it incorrectly indicated that the stack in hand was full when hovering over another item in a locker. The tooltip now correctly appears when the player has a full stack in their active hand and is hovering over another stack of the same type inside the locker.
  • Changed Move Audio Behaviour for CombustionCentrifuge from UpdateEachFrame to AudioUpdate.
  • Added Audio Concurrency Settings for Deep Miners and Centrifuges.
  • Added SuitStorage to PoweredDevices AudioConcurrency.
  • Added Audio Concurrency Setting for Batteries & Transformers.
  • Changed Moved WindTurbine audio logic onto AudioUpdate and added separate audio concurrency setting for large wind turbine.
  • Fixed prefab audio issue with on windturbines on previous commit.
  • Fixed a few issues where lod meshes were not being returned correctly to their cache.
  • Smoothed suit foley audio to suit slower audio tick rate.
  • Fixed Recursive call in PooledAudioSource.ReturnToPool(). It was calling Stop(), which would recursively call ReturnToPool.
  • Added warning for possible issue when already returned lod meshes are returned to the pool again.
  • Fixed HighPassFilters not being disabled when audio-sources were disabled.
  • Further smoothed character foley audio.
  • Removed HPF Filters from wind-turbines audio to reduce their DSP load.
  • Changed moved some more classes over to using AudioUpdate.
  • Changed reduced ambient light during eclipse on Europa.
  • Changed Ambient audio loadType back to streaming.
  • Changed Temporarily disabled out of bounds check and Made Terrain not block atmospheres until issues are resolved with these functions.
  • Added TerrainSpawnRequest class for spawning initial terrain colliders around player spawn location.
  • Fixed bug where if the player is a client and has the IC editor window open and a storm happens, setting the pause toggle button to true would cause the player to get pushed around by the storm while their screen does not update. Setting the pause button to false after that would push the player back to their initial position. The player no longer moves when the pause toggle is true under those conditions. Caused by clients being able to pause the game when they should not have been able to.
  • Refactored LodMeshCache to more clearly define the difference between deactivated and uninitialized objects.
  • Renamed LodMesh to LodMeshRenderer
  • Fixed Client being able to pause their game from using the pause button inside Stationpedia in multiplayer. The pause button now has no effect in multiplayer.
  • Changed moved request Lod logic into LodManager Update loop.
  • Fixed lumps around mine-ables with new terrain.
  • Added rolling lookup for lodobject state to track empty lod objects that do not require mesh recalulation.
  • Changed recursive RunJobState method into a while loop.
  • Reverted spawnpoint changes for now as the terrainspawnrequest was causing some missing lods. Will try using the octree data to determine spawnpoint instead.
  • Fixed player spawning under the terrain. Will now look at the octree to determine where to spawn.
  • Added check to stop moved things requesting lods multiple times in the same frame.
  • Cleaned up creating of new lod objects.
  • Added total count to lod object cache.
  • Changed the lod object pool over to a more simple pool system which incorporates the active lookup concept rather than using the object pool alongside another active lookup. This saves having the active lod objects in two active collections. This also fixes several issues with missing lods due to a long-standing bug with the old pool system.
  • Added another hidden test map into temporary folder in streaming assets. Folder/file structure is still wip.
  • Changed max terrain height in VoxelTerrain from 64 to 256. Terrain height information will eventually be moved into xml data.
  • Added check so lod deletion queue can ignore already deleted lods.
  • Added New Minable Generation algorithm and data classes. Weights are equally assigned for now to leave an even distribution of generation shapes for easier review.
  • Changed sizes of lod object pools based on lod level. Will tweak these as we establish reasonable upper bounds.
  • Changed normalised Minable density setting. 1 is now standard density.
  • Optimised minable vein placement algorithm.
  • Fixed World-size not being applied to voxel terrain on loading map.
  • Fixed issue where putting a ProgrammableChip into an advanced tablet would cause it to clip through the screen. This was happening because the OnEnterInventory method for the ProgrammableChip was overridden without calling base.OnEnterInventory.
  • Changed exception to a console window error when reactivating a lodmesh that is already active.
  • Upped the pre-populate size of the level 4 lod mesh cache.
  • Fixed Valve flow direction arrows being applied incorrectly to the digital valves. The digital valves can mix fluids in both directions but the direction arrows present when trying to construct either of them implied that the flow was one-way.
  • Moved Minable RenderBatch Generation onto OcclusionManager threaded work.
  • Increased Minable render distance to 96m.
  • Added Minables can now be mined.
  • Fixed ThreadWorker.Workers and ThreadWorker.NextWorker were incorrectly set to static.
  • Added VeinGenerationWorker class.
  • Refactored Minable Vein Generation to be multithreaded.
  • Fixed issue where SuitStorage would not remove gas from stored suit's waste tank if the suit had no internal pressure. This meant that it would work normally if moved from the player's suit slot directly into the SuitStorage, but not if dropped on the ground first.
  • Fixed respawning not cleaning up lods for old player body. Now on respawn, lods will be cleared and regenerated. Still more work to be done on this.
  • Added remove requesters step to lod manager processing.
  • Added restriction for generating lods so it won't generate at values less than zero. This may be updated to use map specific sizes.
  • Added back in lod object debugging and removed some unused chunk debugging code.
  • Made dynamic things stop/start requesting lods when they enter/exit a slot
  • Fixed OutOfBounds terrain being rendered.
  • Removed 4k test map.
  • Added 64m and 128m test maps with offset correctly authored.
  • Fixed Offset not being correctly applied to terrain resulting in spawning in a corner of the map. This issue was compounded by our test maps being incorrectly authored.
  • Added new 4K test map with correct offset values.
  • Changed Some VoxelTerrain functions to be static.
  • Moved Minable Textures out of resources folder.
  • Simplified DrawMeshInstancedIndirect.cs and cleaned up to be allocation free and removed a number of unused methods.
  • Added Spherization to Minables shader.
  • Optimised Minable rendering to use DrawMeshInstancedIndirect.
  • Fixed issue where social media buttons would not work when clicked inside the GameMenuPanel but would work when clicked inside the MainMenuPanel. This occurred because the method for the buttons in the GameMenuPanel was not set.
  • Fixed bug where multiple requesters could not find existing active lod meshes.
  • Moved stale lods list into lod manager.
  • Moved remove lods into its own step in run job state.
  • Fixed lod mesh cache getting into a bad state when lod object meshes are cleared before re-processing. Lod object meshes will now be retained if they are still active.
  • Fixed hitching when executing terrain jobs due to too many worker threads being initialized. Will now use processor count - 4.
  • Changed 64x63 test map to use only full voxels (the other test maps have a layer of half voxels several layers deep that make mining feel weird)
  • Hooked up old mining behaviour to new terrain system.
  • Fixed Build Error
  • updated 4096x4096 text world to use correct ore weights and mine amounts/times.
  • Changed Moved ore goggle meshes to XML data.
  • Fixed Ore Goggles now work with new terrain.
  • Increased render distance of explosives.
  • Added Staggered explosion behaviour to remote detonator.
  • Fixed Explosions now work with new terrain
  • Fixed Missing Shader form previous commit.
  • Changed 64x64m test world to have maximum ore density.
  • Moved vein registration into oct-tree space (to ensure consistent behaviour when doing integer division for registration).
  • Added vein de-duplication step for new vein generation algorithm (prevents minables of multiple types from generating at the same location).
  • Fixed Dirt Canister not showing DirtCanisterState if it was in the world and did not have a parent Voxel Tool
  • Added first pass on separating terrain deltas from map terrain data. This is to lay ground work for serializing terrain delta state.
  • Changed Delta Node now calculate their partner node on the readonly octree as needed rather than caching a reference to it.
  • Refactored some functions in VoxelOctree that had unclear arguments.
  • Fixed Items fall through the world when loading a save with new terrain. Added InitialiseLodsOnLoad() to LodManager which generates all requested lods in a single frame before unpausing game on Load.
  • Added NewTerrain now only serializes delta changes rather than full terrain file.
  • Fixed an issue where new terrain would not deform when explosion happened.
  • Added flood fill method for filling voxels inside the terrain mesh.
  • Added a few helper methods for getting neighbour nodes from any given octree Node.
  • Added Clients now receive New Terrain deltas on join.
  • Fixed Issue with Dirt Canister not showing the correct DirtCanisterState in the world or on the client. This was caused by the SetDirtCanisterState method not being called at the appropriate times.
  • Added Clients now receive terrain change updates from server.
  • Added horizontal size to floodfill to stop the progression if the edges of the map are reached. This should just be a precaution as the map will usually fill the entire octree horizontally.
  • Added new method for generating terrain from a heightmap that only generates a "crust" and then floodfills under it which is much faster than before. This also fixes the "spongy" terrain that we were experiencing before
  • Added missing horizontal size to floodfill
  • Changed UV coordinates for charging bars color.
  • Fixed Visualizers on the DirtCanister prefab. Incorrect visualizer meshes and UVs were being used.
  • Fixed a small issue where Client joining a session threw a null reference exception and prevented the host from continuing to play. This was to do with the new terrain trying to be loaded while the terrain settings were null.
  • Removed some unused debug functions from VoxelTerrain.
  • Fixed Voxel tool now works with new terrain.
  • Cleaned up some places where vector3s were being handle ambiguously in terrain and minable functions.
  • Fixed new Terrain and minables did not align with the large grid. When the terrain mesh and minable position is set they are now offset by 1/2 voxel size.
  • Added function on node to get siblings directly below.
  • Added new fill method for octree.
  • Fixed an issue where the Voxel Tool would not use the last bit of dirt inside the equipped Dirt Canister. This was caused by an incorrect comparison in CanRemoveDirt that checked if the CurrentCollectedDirtValue was greater than UsageEachVoxelPlacement, instead of greater than or equal to.
  • Fixed Desired depth not being evaluated correctly in getDensity function. This fixed the last of the terrain seam issue and improved fidelity of distant terrain.
  • Fixed a number of places were a depth argument was taking in a size for octree calculations (and updated those functions to work correctly with the correct input).
  • Changed baked terrain data is now stored in a ReadOnlyVoxelOctree, changes made by the player are stored in the object based tree VoxelOctree. This results in a 90% reduction in terrain ram usage 6GB to 600MB and a 70% reduction in terrain load times 13s to 4s (tested on 4k map).
  • Added ReadonlyVoxelOctree class this is a highly optimised octree that is backed by a byte array and is readOnly.
  • Added some additional debugging info for terrain performance testing,
  • Fixed a performance issue with ReadOnly octree which was causing get density function to take too long to run.
  • Added HelpText for TestOctreeCommand.
  • Removed un-needed locks on some lod Manager functions (all calls were coming from main unity thread).
  • Changed Terrain Lods will now refresh faster when there is less work scheduled (i.e during mining).
  • Fixed Bug where having sequential ladders on opposite sides of a wall would cause the player to teleport to the other side of the wall.
  • Added changes to New terrain ore veins are now saved and synced to clients.
  • Added wip octree fill method which is significantly faster.
  • Cleaned up relationship between readOnly octree and delta octree.
  • Added IOctTree and INode interfaces.
  • Fixed VoxelTerrain.MaxDepth pointing to Octree when ReadonlyOctree was initialised.
  • Changed Octree Constructor to require a pointer to a masterOctree it can be null if the constructed octree is the master Octree.