Stationeers - Rocket
Cross learning and tech sharing between our projects brings you this update



Contrary to what has been incorrectly suggested in some reviews, the multi-team nature of our studio works towards better products, and this update is an excellent example of that. After technical review of our unreleased train tycoon game (Art of the Rail) by ICARUS technical team members, we embarked on a new approach to multi-threading for some core systems that took better advantage of multiple cores, and reduced thread concurrency dependency. What this means is we were able to squeeze better performance and reduce technical complexity (think: opportunity for really hard to fix bugs) at the same time.

We are really proud of how we have built a studio that has different teams, but are still able to share the lessons and grow better overall - and we hope you see the results of that too. Our lessons, both good and bad, from ICARUS and Stationeers are flowing between our teams and projects as well as the unreleased games we are working on. Even if these unreleased games never came out, they prove valuable in us being able to test our systems and approaches that we can port to games like Stationeers.

It's a shame that the top review for Stationeers, draws the conclusion that multiple projects and teams in a studio is bad for any of the games when, as this update demonstrates, the reality is quite the opposite.

Highlights
  • Localization is fixed
  • Some versions of Linux could not run the dedicated server due to missing DLLs, this should now be fixed
  • The atmospheric tick has been highly optimized and experiences much less slow down. On many saves the atmos tick was running only about once per second or worse. Now it will be running every 500ms. On top of this the room generation and atmos tick are now in a fixed sequential order.
  • Fixed large IC scripts not being synced in multiplayer
Want to run a dedicated server? Much has changed! Checkout this guide on my github for more information
Background on Threading

Threading, in a programming sense, can be thought as of making your computer multi-task something. That is obviously a good thing, especially so for a systems game like Stationeers, because your processor (CPU) has a lot of things to do. You'll hear us talk about a "frame", which is the time (typically measured in milliseconds or "ms" for short) which you have to construct the image that will be sent to the users monitor for display. If you take to long, or even do so at constantly shifting speeds, the game "lags". There are multiple reasons that this can happen which you will hear people talk about on forums, such as being "CPU bound" or "GPU bound". GPU is the graphics card (or integrated processor), a device heavily focused on doing enormous numbers of math calculations concurrently (at the same time). When I say enormous, I really do mean enormous. Modern GPUs conduct math operations at a truly staggering rate.

While it is obvious that multi-threading is good for games, it is typically also very bad for them as well. This is because when you make an operation concurrent, it is very difficult to get that working together with the other threads going on. Especially so with the "main thread" - which is the one your game is using to put everything together. Modern game engines such as Unity or Unreal nearly always have some multi-threading out of the box, such as physics (at least some parts of it), audio (again, some), and some file operations. The rest is up to developers.

Sequential Operation of Worker Threads in Art of the Rail



We're pretty proud that Stationeers has always delved deep into unlocking the potential of all those CPU cores on your computer. But in many cases, we would make one thread for one group of tasks. Take atmospherics, which operated on one thread but constantly calculated what needed to happen. In Art of the Rail, I had a similar approach to vehicles. I had a companion thread that would move vehicles along their road or rail constantly, at a regular tick rate. This however caused some eventual scale issues and also left me the constant headache of the main and vehicle threads (as well as other ones) tripping over each other.

Unity offers an out-of-the-box approach to solve this called ECS, but it has a lot of restrictions. So with Art of the Rail, I took the general approach and rolled a custom system. What it involved was rolling up a variable number (based on detected core numbers, settable by player in settings) of "workers", assigning the tasks between these workers, and executing all the workers at the same time, but only applying their results at the start of the next frame.

What this means is that we get to do things sequentially, avoiding the problems of trying to keep data congruency between the state of things on varying threads. Work happens while the game is running, but it is all reconciled at the beginning of a frame, so all threads always agree on the state of the game.

https://store.steampowered.com/app/1286190/Art_of_the_Rail/

Applying this to Stationeers

We were having tremendous difficulty fixing bugs associated with the Room Manager thread in Stationeers. The purpose of this thread was to generate rooms, but it caused a lot of weird state issues due to concurrency and data trampling with the atmospherics manager. Not to mention it would sometimes take an enormous amount of time to run.

There wasn't a clean way to solve this, so I proposed we try the Vehicle Worker implementation from Art of the Rail we discussed above. The situation is much more complex in Stationeers, however. In Art of the Rail the vehicles are very independent making them an excellent candidate for truly concurrent handling. Stationeers has multiple dependencies, so it ended up being a much more complex process.

Broadly the following tasks are threaded, and handled using a mix of dedicated threads or concurrent worker threads:
  • Calculating the neighbors to mix with
  • Caching all the data for the main thread
  • Fire and burning
  • Any new rooms that need to be calculated
  • Atmosphere mixing between neighbors and networks
  • Internal reactions in Atmospheres
  • Pipe Atmospheres are handle specially
Thing atmosphere reactions are done on the main thread, because they touch a lot of different things.



The result is about four time faster than it was before, and it solved a whole lot of bugs associated with room creation issues.

Order of operations for Game Logic is now
This will likely have impacts on your IC code, if you are tightly dependent on some of the order of operations and timing.
1. Room Generation
2. Atmospherics Simulation
3. Power Tick
4. Logic Chips/Devices Tick
5. IC Chips Tick
Dedicated Server development

A fair few fixes and changes have come through, mainly focused on Linux dedicated servers, but with some limited success due to issues with our build server. It is still not very pretty, and we are still working on this, but it is much better than before. We have also reached out to many of the Game Server Providers (GSPs) directly, to work with them to help better support our servers. This will be an ongoing focus for us. We plan to devote significant resources to this over the coming months.

Like what you see? Help out!
We're super excited about where to take Stationeers in 2022. If you are as excited as we are please consider leaving us a positive review - it means a lot to us. Also our DLC was made as a way for the community to support us, so consider grabbing that as well.

https://store.steampowered.com/app/1038400/Stationeers_Zrilian_Species_Pack/

https://store.steampowered.com/app/1038500/Stationeers_HEM_Droid_Species_Pack/

Changelog v0.2.3392.16643
  • Fixed Respawning after dieing in an explosion stops respawned character from being able to move. (beta bug introduced rev.16602)
  • Fixed Error spam thrown by Atmospherics thread when trying to calculate Temperature of a Zero volume atmosphere. Zero volume atmospheres are now deregistered if they accidently get created.
  • Fixed Terrain Manipulator mining terrain rather than adding it (bug on beta branch only, introduced rev.16557).
  • Fixed Rooms not being deregistered when a wall of a room is completely deconstructed. (introduced rev16566)
  • Fixed Error thrown by TerrainLod.
  • Fixed Server hangs when printing a Programming motherboard.
  • Fixed case where smelting ore could cause occlusion thread to crash, causing disappearing pipes bug.
  • Fixed Atmospheric Tablet reading incorrect values (due to occlusion thread not updating its local atmosphere).
  • Fixed a number of errors thrown by atmospheric interactions happening when Main thread was trying to modify atmosphere data. These now use AtmosphericEventInstance system to handle these interactions.
  • Fixed Error thrown by Audio Concurrency system when an ore was smelted while another ore was playing an impact sound.
  • Removed GetAtmosphereWorld function. Use GetAtmosphereLocal() or SampleGlobalAtmosphere() for Reading on main thread. Use CloneGlobalAtmosphere() or GetAtmosphereLocal() for writing atmospherics data the atmospherics thread.
  • Added new AtmosphericEventInstance functions for Grid operations (where an atmos does not yet exist) CreateEmpty, CloneGlobal, CloneGlobalAddGasMix, CloneGlobalRemoveEnergy. Also added Reset AtmosphericEventInstance for clearing a gas mix.
  • Load game button no longer throws exceptions if there are no saves
  • Stop world descriptions from disappearing when you leave the current game
  • Fixed bug where certain values would cause multiple exceptions when hovering over pipe analyser
  • Fixed Clients could sometimes fall through terrain when joining.
  • Fixed Helmets offset on clients.
  • Fixed Locked game at 60fps during initial scene loading.
  • Changed Forced Terrain generations to run synchronously
  • Fixed FrameRate Counter now runs in pause menu.
  • Fixed FrameRate limiter no longer accepts out of bounds values.
  • Fixed Simple, Good and Beautiful Graphics pre-sets turning on v-sync.
  • Removed double logging in console window
  • Removed Cell.CellLookup Dictionary, Was duplicating GridManager.GridCells.
  • Fixed Bug where terrain renderers being turned off at incorrect time when playing as server.
  • Fixed World atmospheres that are outside of rooms not being destroyed in a timely fashion.
  • Fixed Some world atmospheres not having a reference to their cell.
  • Fixed bug where languages were not showing and could not be selected
  • Cleaned up help logging in console, made it oneline. Still a bit messy. Will make it better soon.
  • Fixed Atmospheres in rooms in terrain having a volume less than 8000 when all terrain voxels appear to be mined out.
  • Fixed exception thrown when intialising console overrides in ConsoleWindow
  • Fixed DuctTape not fixing solar panels (and other things)
  • Added clearing console once dedicated server is ready to receive input
  • Fixed submitting large IC scripts in Multiplayer as server or client throws error spam and/or crashes the game.
  • Added small optimisation for room generation
  • Added interception of unity logs by our logging system so that we can deal with them individually
  • Fixed -settingspath not working if file already exists. Removed existence check. File is created if not.
  • Fixed Atmospherics and Logic Tick not pausing when in pause menu.
  • Removed IMGUI completely from server builds.
  • Fixed Terrain does not hold atmospheres. Rooms can now be reliably generated using terrain.
  • Refactored Atmospherics, Power/Logic & Room Generation to run sequentially on a new GameTick locked at 500ms. Previously these different systems were running concurrently and at increasingly varying rates as bases grew in size.
  • Order of operations for Game Logic is now: Room Generation > Atmospherics Simulation > Power Tick > Logic Chips/Devices Tick > IC Chips Tick.
  • Added new worker thread system.
  • Fixed World atmosphere being created when mining. Mining into terrain will now create an empty atmospheric cell that will pull in neighbour gas.
  • World Atmosphere sometimes being spawned on loading a game in rooms created by terrain.
  • Fixed slowdown of atmospherics processing in larger bases.
  • Refactored Atmospherics Processing to allow for parallel processing of most atmospheric functions. Atmospherics runtime is now about 4x faster.
  • Fixed FrameRate spikes when Clients were Reading and Processing Atmospherics data. This work is run on a separate thread.
  • Fixed Moved Jetpack emissions handling to Atmospherics thread.
  • Fixed submitting large IC scripts in Multiplayer as server or client throws error spam and/or crashes the game.
  • Fixed Air conditioner buttons not interactable for clients.
  • Fixed Explosion FX and sounds not playing.
  • Added sounds to remote detonator.
  • Added beeping sound to armed explosives.
  • Fixed Explosions not mining terrain.
  • Fixed Remote Detonator not working for Clients.
  • Fixed Error when an explosion triggered.
  • Fixed Explosions not removing clutter.
  • Changed increased the radius of terrain mined by explosives to match the radius at which force/damage is applied.
Jun 16, 2022
Stationeers - Rocket
Dedicated Servers
We are actively working with those running Dedicated Servers, both on the forums and in discord, to ensure we get the best we can. As such, we have decided to release a hotfix with some urgent fixes, mainly focused on those running dedicated servers.

IMGUI issues on Dedicated Server Linux
Some of those running Dedicated Servers using the Linux binary are encountering a spam of warnings related to IMGUI. We use an excellent external library called Dear IMGUI in the main game, to allow us to do complex UI. This is not used in the "terminal" version of the game, but is still included in the distribution. As outlined in the last post, this move to a union of the main game and dedicated server code bases, its complex for us to remove individual packages and components - so something we need to look into. Until there, while you can safely ignore the warning being spammed, they can be disruptive to running the server.

Installing the Dedicated Server App
Adding:
-batchmode
To the startup parameters the main game will launch the game as if it is a dedicated server. Otherwise, you can install "Stationeers Dedicated Server" from the "Tools" category in steam. This can most easily be done via the SteamCMD command line application. Stationeers Dedicated Server is a tool that is free to download and run anonymously, you do not need SteamCMD logged in as a client to do so.

In future updates we will post some guides about how to install and run, in the meantime the community is exploring this process on the forums. It is challenging to write a guide, as we are still actively changing the process based directly on our communication with you. It is vital we invest time and effort making the Dedicated Servers excellent, so that true online communities for stationeers can be run.

Changelog v0.2.3344.16555
  • Changed server checks as a runtime for IMGUI runner
  • Removed unwanted meta file
  • Fixed RenderDistance on Harvey's and grow-lights.
  • Fixed broken mods breaking loading of the game in some situations
  • Fixed load command pointing to wrong place outside of dedicated server
  • Added extra optional arg to -load to initialise a new game and save it to disk
  • Fixed (potentially) clearing console for dedicated server
  • Added -settings as a launch command with support for multiple property assignments in args
  • Added FPS cap (25) to dedicated server
  • Fixed and enabled in-world debug visualizers
  • Added #if UNITY_SERVER checks to imgui package to ignore for dedicated server
  • Removed default.ini from StreamingAssets
  • Fixed Index Out of Range exception thrown by StringManager when a NaN or infinite number was passed in.
Stationeers - Rocket
The dedicated server was not quite ready to go for the last patch but it's here now and it's better than ever.

Our deployment of the refactor also highlighted a suite of problems we needed to jump onto quickly. Some we managed to patch very quickly, including during the weekend when we deployed the update. Some took a little longer but are here now.

Dedicated Server Rework



With the complete rework of the multiplayer that we launched in our last major update, we applied the same treatment to how we approached dedicated servers. The steps we have taken allow us to walk towards truly being able to run public servers with many players. We think that, over time, the work we have done now is a great first step to really being able to build online communities for Stationeers. This is just our baseline, and we plan to extensively develop on this.

The old system was developed in tandem, parallel to the main game. This often resulted in bugs appearing in the dedicated server and complicating our development substantially. Now the dedicated server is integrated into the base game code, with the build for dedicated servers simply stripping unnecessary parts out. This massively simplifies how we build the game with dedicated servers in mind, and paves the way for additional command and tool support for those wanting to run Stationeers-based communities.

It is likely no secret that we are huge fans of multiplayer gaming, and proper dedicated server support has been a dream of the team since we began the project. It's a tremendous feeling for us to take the first steps along this path, and we hope you are as excited about this as we area. Please do let us know in the Discord, and discuss there as we will be putting as much effort as we can into expanding on this.

Mods & Workshop Support



Most mods, custom worlds, and IC scripts from the workshop should now be working again. There were some issues that crept in as we began removing all the Steam SDK hooks so that those who haven't run the game through steam, could still play it just fine. We are a firm believer that strict DRM is not appropriate for our games. Technically, there would be nothing required for the game to be torrented or given to another person. Obviously, though, we hope you buy the game and support our team. As such, there is still some remedial work we need to do to tidy up the lose ends of this, such as mod and workshop support. We will continue to monitor for any problems or missing functionality here.

General Bugfixing

There is a bunch of smaller bug fixes in as well and we're happy to finally be working hard to hunt down and fix some of the bigger issues that have been around for a long time (prior to the big refactor). You should start to see these in the next update. We have been working hard behind the scenes to continue to optimize the game. Recently we have been experimenting with pulling across additional job system multithreading that we implemented live on a devstream for Art of the Rail, another project at the studio.

https://store.steampowered.com/app/1286190/Art_of_the_Rail/
IMPORTANT
If you have saved since the update and were playing as a DLC race that save is likely corrupted! Please load a save from prior to the update. And your species and gender data will now parse correctly through to the new system. You will need to redo your other cosmetics settings as these will have been set to default.
Next Steps
We are working on settling into a regular cadence of weekly updates, which we have been doing every week for another studio project (ICARUS) with great success. The updates won't always be major ones, but keeping to a weekly cadence helps us to keep the current build active and in a solid state.

Another focus is on better localization, and some love for our extremely supportive communities all across the globe. This will include localized voice for some of those territories as well.

We will now begin implementing the plans we have to take Stationeers from being a bunch of cool systems into a solid game loop. There is a tremendous amount of great systems in the game and we've been working on design behind the scenes to better tie it all in together.

Like what you see? Help out!
We're super excited about where to take Stationeers in 2022. If you are as excited as we are please consider leaving us a positive review - it means a lot to us. Also our DLC was made as a way for the community to support us, so consider grabbing that as well.

https://store.steampowered.com/app/1038400/Stationeers_Zrilian_Species_Pack/

https://store.steampowered.com/app/1038500/Stationeers_HEM_Droid_Species_Pack/

Changelog v0.2.3336.16533
  • Added password check when creating new game session
  • added settings commands to CLI
  • Added netconfig command for CLI.
  • Added server password locking
  • added queue to catch premature logs to console window, then print them after init process
  • added -settingspath launch command to direct exe instance to a different settings file
  • Added dev config for settings various properites in game without dirty scene
  • added svn ignore DevsConfig.json
  • Added in game chat using `say` command
  • Added old save prompt
  • Added WIP prompt when entering server list or hosting a game
  • Updated build script to properly support dedicated server builds
  • Added custom command line parser
  • Added new pipe label texture
  • Updated scale of cooked food
  • Updated pipe label texture
  • Added new 'discord' command in CLI
  • added basic form ask for server details when starting new game
  • Added commands for kicking/banning players from server
  • Fixed Loading a Save when playing as HemDroid and Zrillian that was created on the previous branch causes character to spawn as naken human with battery in suit slot.
  • Fixed Zombie Bodies begin created when respawning.
  • Fixed TakeControl command being called twice in certain load execution orders.
  • Fixed Respawned Characters not registering with CameraController.
  • Fixed Console Error Spam on Clients when a dead Stationeer body decayed into a skeleton.
  • Fixed Drop position of dead/unconscious bodies.
  • Fixed flat and angled solar panels from not always correctly seeing the sun due to misconfigured ray offsets.
  • Fixed PowerTransmitters can cause loading saves to break.
  • Fixed Dynamic Generator can cause loading saves to break.
  • Fixed Sometimes there would be the occasional ice on Venus.
  • Fixed Error spam from sterling engine tooltip when empty gas canister inserted.
  • Updated server list items to support new meta server updates
  • Fixed over populated server list with placeholder data
  • Fixed error that could be thrown when autosaving due to list of all Referencables being modified.
  • Replaced meta server IP
  • Replaced OpenUPM for DiscordSDK directly because openupm version didn't build for linux dedicated
  • Cleaned up unused interface methods from INetTransport
  • Fixed bug where container contents disappear too soon when closing
  • Fixed Error thrown by audio concurrency system when an audio source is destroyed in the same frame as playing a new sound.
  • Fixed issue of not being able to start a new game session after leaving current game session
  • Fixed jumping when console is open
  • Fixed Camera FOV changing in start menu
  • Made mousewheel scroll selection more intuitive
  • Changed flare particles to world space
  • Fix bug where swapping slots with the slot window open caused error
  • Fixed NRE when no player cosmetic data xml had been saved.
  • Fixes to get game to compile on linux
  • Fixed NRE in Thing.Mode in linux dedicated
  • Fix issue with mods not loading
  • Fixed batch console input for dedicated server
  • Fixed Key bind settings menu not showing any of the keybinds
  • Improved usability of CLI reading input
  • Fixed backspace not working right for CLI
  • Removed DoTween warnings in dedicated server builds
  • Removed unnecessary log when app finished loading in dedicated server build
  • Disabled discord SDK in batch mode
  • Reverted food scale changes
  • Removed x86 dll for Discord SDK
  • Removed server admin password from settings menu
  • Removed input form for CLI when creating a game session in favour for xml file
  • removed hashing on stored passwords for now
  • Removed log from build script
  • Removed shell32.dll from linux dedicated. Wrapped in !linux preprocessor
  • Deleted a bunch of vestigial brain code.
Jun 5, 2022
Stationeers - Not Simon
IMPORTANT:
If you have saved since the update and were playing as a DLC race that save is likely Corrupted! Please load a save from before the update. And your species and gender data will now parse correctly through to the new system. You will need to redo your other cosmetics settings as these will have been set to default.

  • Fixed Loading a Save when playing as HemDroid and Zrillian that was created on the previous branch causes the character to spawn as naken human with battery in suit slot.
  • Fixed Zombie Bodies begin created when respawning.
  • Fixed TakeControl command being called twice in certain load execution orders.
  • Fixed Respawned Characters not registering with CameraController.
  • Deleted a bunch of vestigial brain code.
  • Fixed Console Error Spam on Clients when a dead Stationeer body decayed into a skeleton.
Jun 5, 2022
Stationeers - Not Simon
Fixed worlds with craters or asteroids not loading terrain on clients
Jun 3, 2022
Stationeers - Not Simon
This hotfix addresses two issues caused by the same problem:
  • Some dynamic items being oriented incorrectly in slots.
  • Dynamic things, including the player, teleporting to origin.
Stationeers - Rocket
We have been working hard over the last eight months, building a new team and adopting a new approach based on lessons learned with our other studio projects, such as ICARUS. As part of our review of the project, and where it was at, we identified major changes that needed to occur in the project, in order to progress the game to where we all want it to be.

This rework would require us to touch nearly every system in the game, reworking from the ground up systems such as Multiplayer and how our memory was managed in the game. This was a huge effort, and very daunting - taking us away from the regular update cadence we have been providing. Finally, all this hard work has bought us here: the start of a great process of discovering what Stationeers can really be.

Optimization



Much of our work has been devoted to redoing entire systems so that they work well at scale. Our teams on our other projects provided input and advise, bringing knowledge from some very senior staff with decades of experience to help the project. This has allowed us to provide massive improvements in performance and stability for both singleplayer and mutliplayer.

This video from a community member demonstrates some of the optimizations we were able to achieve:
https://www.youtube.com/watch?v=XlO1sBk7JqU

Where to from here



Pushing the work to "main" is really just the first step. During this period of refactoring the foundations we have been sketching out what we want the game to be, and with this work done, we can begin updates like we were before. However, there will be one big difference: we won't be restricted by the performance and systemic issues like we were before.

Our focus for the next few weeks will be continuing to bugfix and improve this build, while we work on our additional content to come.



How you can help

We are immensely proud of the efforts of our team, and grateful for the assistance of the other teams at the studio - who have been able to bring experience and advice to the team to get us here. Please do consider leave a positive review for our efforts so far, and help us spread the word about the reboot of the project!

Additionally, please consider supporting us by buying the DLC we put together as a form of "supporters edition" for the game.

https://store.steampowered.com/app/1038400/Stationeers_Zrilian_Species_Pack/
https://store.steampowered.com/app/1038500/Stationeers_HEM_Droid_Species_Pack/

Dedicated Servers

Running the game with the parameter -batchmode will run it in dedicated server mode. We haven't yet got this build deploying in the Stationeers dedicated server branch. This is a completely different approach, much more optimized and robust. We will be releasing these as soon as we can, but the upside is they provide a tremendous step up from the server offering we had before. This will give server hosters the ability to run true public servers, with good player numbers. This was totally impossible before.

Accessing the old version

The previous version is available on the "previous" branch on steam, and will remain there indefinitely for those who have any issues with this new version. However this will be unsupported, as we can't apply any fixes to it.

Join us on Discord

Join the crew on discord and let us know your thoughts and any bugs or issues you have. This update would not have been possible without the tremendous support of the community over the last eight months, and since the start of the project.

Checkout our other teams projects!

These other projects have been able to help us with assistance and advice, please check them out to see if you'd enjoy them.

https://store.steampowered.com/app/1286190/Art_of_the_Rail/
https://store.steampowered.com/app/1149460/ICARUS/

Changelog
There are so many fixes, optimizations and changes (+900 changes, across +10000 files in the project), that steam won't accept that much text in a post!
TOO MANY CHARACTERS FOR STEAM, SEE FULL LOG ON PASTEBIN!
  • Another fix for helmet offset bug
  • Fixed NRE when requesting network data and a client is null
  • Fixed missing script editor error when selecting game controllers
  • Fixed two rovers being created when building a rover.
  • Fixed BuildStates being set twice on server.
  • Fixed Plants and seeds throw error spam when destroyed by lava.
  • Fixed On Loading game tanks/portable machines attached to connectors would be halfway in the floor.
  • Added server settings changes support
  • Fixed NREs when trying to join a server from the list
  • Fixed Error spam thrown by chickens
  • Fixed Can't drag dead players.
  • Fixed Can't drop your old body if you pick it up after respawning.
  • Fixed Key bindings not being reset after respawning.
  • Fixed Gasping breath on starting a game with a new character.
  • Fixed player animations not being synced to clients when the is occluding them
  • Fixed advertise server setting not working
  • Changed Slot rotation of canned food.
  • Fixed Double clicking on a server in the server browser doesn't work.
  • Fixed layering issue with GasMask when removing/add to head slot
  • Fixed Items in Lockers incorrectly rotated.
  • Added client side terrain generation to significantly reduce the amount of data sent over the network
  • Made ore generation actually deterministic to allow for client side terrain generation
  • Optimized ore vein generation
  • Fixed loading screen from being disabled to early for joining clients
  • Added destination IP for meta server
  • Potential fix for when suit becomes invisible to some players after client joining
  • Fixed gameObject layering issue for backpack and helmet when entering non-human slots
  • Fixed bed's missing material.
  • Fixed Objects in Right hand are rotated backwards on Load and Join.
  • Fixed When using ParrelSync in editor additional clones do not get assigned a unique client ID when a clientId is assigned to the primary instance.
  • Fixed issue with reagent mixer switch not showing error state
  • Fixed animation curves not being deserialized correctly on clients
  • Fixed New elevators Starting with a speed of 0.
  • Fixed Gas Canisters bought from Gas Traders were Empty.
  • Refactored TraderContacts to iReference-able system.
  • Fixed Trader Contacts not syncing to Clients.
  • Fixed Trading on clients not synced to server.
  • Fixed Electronics thread error message when un-loading world.
  • Fixed Computers sometimes unable to to see devices on their network (i.e Computer with CommsMotherboard not receiving updates from satellite dish).
  • Fixed Unable to buy more than 1x of a non-stackable item from a trader in a single transaction.
  • Fixed respawn conditions not loading when app starts
  • Fixed and improved respawning system where respawn conditions weren't assigned properly
  • Removed embedded TMP package in favour of registry version
  • Removed embedded TMP package in favour of registry version
  • Changed some min/max and default settings values
  • Fixed wrong material assigned.
  • Fixed refresh rate setting showing "resolution"
  • Removed more settings from menus
  • Added RefreshRate as a new dropdown in settings menu
  • Fixed NRE when trying to print to console before buffer is initialised
  • Fixed compiler error in AtmosphericScattering. #endif in wrong place.
  • Removed old console panel and moved remaining logs to be output through the new console
  • Removed most instances of <color=...> from logs
  • Fixed autosave not working until the setting was toggled off and on again
  • re applied custom world fix
  • Fixed Building new Sequencer music machine prevented game from saving.
  • Fixed Error spam when looking at input screws of a new sequencer machine.
  • Fixed Clients unable to interact with Logic Math Chips: Compare, Math, MathUnary, MinMax & Select.
  • Added Stationeers can now set the speed of an elevator by writing to the ElevatorSpeed Logic Variable on any of the shafts (speed value written will propagate throughout the Shaft network).
  • Fixed Error on Server when clients body decomposes.
  • Fixed Error Thrown by suit when a body decomposes.
  • Fixed custom worlds in multiplayer
  • Fixed world setting data not being set to clients
  • Fixed ReagentProcessor not turning on when Bench is on
  • Fixed Elevator Speed Slow down. Have increased speed over original by 50%.
  • Fixed a bunch of errors thrown when clients die.
  • Fixed Stun Damage not healing over time when in a safe breathing environment.
  • Fixed throw time. Back to 1 sec (was accidently increased when throw power was increased)
  • Changed Ragdoll stops after a period of time on death.
  • Fixed humans eyes being opened when sleeping
  • Fixed humans eyes being opened when dead
  • Fixed sensor lens graphic not disappearing after ore is mined
  • Fixed Glitchy timing for Music machines clients.
  • Tightened up timings of rhythmic playback on music machines for host/single player.
  • Fixed SawLead patch not working on Leads cartridge.
  • Added trigger zone to computers to turn off screen when outside bounds to save on CPU costs for world UI
  • Fixed dropdown issues on Sorter and Fabricator PC screen
  • Improved scrolling with up/down buttons on computer screens.
  • Fixed Error spam on Opening Server browser.
  • Fixed music machines not working on client.
  • Another Fix for Crash on client when merging Networks.
  • Added support for joining from server list (upcoming feature)
  • Fixed New Elevators built in Beta not working. You can fix any bugged elevators in your save by either: disassembling them and rebuilding them OR using a logic writer to set all the elevator Shafts On Variable to 1.
  • Updated Elevator carriage tooltip to show when an elevator is not working because the shaft its trying to move through is turned off.
  • Fixed Hard crash on clients that could happen occasionally when networks were merged.
  • Added better syncing of Filter enum on comms motherboard
  • Removed batch mode check for a series of initialisation calls when app start
  • Added an overload to process one cmd line for CLI commands
  • Changed Increased Throw power by 50%.
  • Fixed Velocity of client players now effects the velocity of thrown items. (previously only worked for host)
  • Fixed Items dropped by clients drifting to the start drop position.
  • Fixed Items precision placed by clients drifting slowly to target position (they now snap).
  • Fixed Throwing sound not playing.
  • Fixed client not being able to depart a trader
  • Fixed client side filtering for comms computer
  • Fixed render distance on modular rocket itemkits.
  • Fixed SmartGasCanister not updating visualizer on clients.
  • Fixed instances where tablet (and other tootips) were not showing fractional values.
  • Removed some extra logging in dedicated. not needed
  • fixed NRE for internal atmosphere on dedicated server
  • Fixed Internal Atmosphere is not initialised on Dynamic Gas Canister when starting new game in Dedicated server.
  • Removed more DEDICATED_SERVER defines
  • fixed manual saves on dedicated server
  • Fixed Removing a pipe,cable or chute from a network would cause adjacent network elements to disconnect from their connected devices.
  • Fixed items in slots having the wrong position/rotation
  • Fixed issues with changing appearance within a game
  • Fixed Dynamic items stuttering when rotating on clients.
  • Fixed ToggleLogBps command.
  • Removed unnecessary error logs
  • Fixed syncing issues with player cosmetic data
  • Removed half precision for rotation and position on dynamic thing update messages
  • Fixed Error where server send bad new network data on join "Error: Clients should not be assigning a new Reference. Client is trying to assign a new reference for CableNetwork: 0".
  • Disabled Some network logging.
  • Potential fix for items on characters being incorrectly rotated/positioned on join.
  • Removed some debuging code
  • Fixed client having local authority over everything until they take control of a character
  • Fixed AngleGrinder spin-down sound plays when saving game.
  • Fixed AudioEventUpdates being added to queue for things that didn't have sounds.
  • Fixed Signs sync correctly to clients.
  • Fixed LightOnOff Sounds play when suit battery is empty.
  • Changed Halved the size of the terrain clutter
  • Fixed stuttering movement on physics items when piled on top of each other.
  • Fixed error thrown on client when body decays.
  • added support for spaces for arguments surrounded with quotations in console window. Use case: 'loadgame' command for paths or filenames.
  • added 'leave' or 'exit' command to exit a game session
  • Changed exiting client side message to a lower level to handle all IExitable implementations
  • Fixed Client not receiving the last atmosphere update when an atmosphere is evacuated.
  • Fixed console input not working by disabling in world debugging until solution can be found
  • Fixed Rover tire sound playing in vacuum.
  • Fixed Rover movement is stuttering in single player.
  • Fixed client getting out of Sleeper
  • fixed issue where join message was OK but didn't break loop resending if failed.
  • added log command
  • Added save commands to ingame CLI
  • Improved text wrapping in ConsoleWindow
  • Fixed Build Error.
  • Fixed Some devices get disconnected from a cable network when it was merged with another network in certain configurations.
  • Fixed Devices labelled by clients or server do not have the custom name set on other clients.
  • Fixed Pipe label is invisible when placed on server. (now shows default text).
  • Fixed Playing FX on fire Extinguisher when in batch mode.
  • Modified Sentry Config
  • Added some verbose logging to join queue process
  • Fixed Steel frame not blocking sound.
  • Fixed Exception thrown by suit on join: UnityEngine.Renderer.set_enabled(UnityEngine.Renderer,bool).
  • Fixed Exception thrown by battery when disconnecting.
  • Added batch mode checks to sound playback in audio manager.
  • Fixed spawning things through CLI
  • First pass on trade transactions on clients (Trading now work on clients but with some bugs)
  • Improved CommandLine code for future proofing scaling
  • Fixed Clients not seeing Global Atmosphere Temperature correctly (bug Introduced rev.16267).
  • Fixed Incorrect interaction tool-tip on plants in Dynamic Hydroponics planter for clients.
  • Fixed Clients not seeing plants at correct growth state on join.
  • Fixed Seed packets throwing an index out of range exception.
  • Fixed mismatch in read/write type in client trade request message
  • Fixed NRE thrown by suit.
  • Fixed Index out of range error caused by suit.
  • Second iteration on fixing traders
  • Added the ability to re-smelt advanced alloys in the advanced furnace, as the inability to do so was confusing to players.
  • fixed Constantan only having a upper smelting temperature of 9999, instead of the 99999 all others hav
  • Fixed Case where server could send an internal atmosphere update with an unassigned parent ReferenceId. It caused error spam on clients when connecting to a Dedicated server.
  • Fixed Atmospherics exception caused by changing the DeregisteredAtmospheres collection on the thread during NetworkUpdate Write function.
  • Fixed Gas Displays not showing the correct Mode on clients when joining.
  • Fixed Errors thrown on client and server when joining during a storm.
  • Fixed Advanced composter creating 120x too much gas at super cold temperatures.
  • added error log when client is receiving atmosphere.parentId as 0.
  • fixed issue with trying to get steam avatar when steam sdk not intialised
  • Fixed Atmospheres undergoing changes in Pressure would have their Temperature flipflop between incorrect values on client.
  • Fixed Error on client when player decomposes.
  • Fixed Clients now run their atmospherics tick immediately after receiving the atmospherics network update. (previously it was running on a fixed timer which could result in multiple or no client side ticks between updates).
  • Fixed Clients sometimes seeing a vacuumed out atmosphere as having a small amount of gas remaining.
  • Changed Atmosphere message now sends Temperature rather than energy. Small variances in molar Quantity or Energy Quantity at the extremely small ends of either scale could result in wildly inaccurate pressure and Temperature readings on the client. Client now infers total energy based on the Temperature (not the other was around as was handled previously).
  • Fixed exception where client is trying to create an internal atmosphere on a structure in batched mode
  • Fixed Human spawning in batched mode. You can join a dedicated server now but its not spawning in the correct player model yet, it will create a new one.
  • Removed placeholder auto launch arguments
  • Fixed -new launch command
  • added -load launch command
  • Added GameManager.IsBatchMode static property to replace DEDICATED_SERVER preprocessor
  • Fixed Wireless power transmitter causing error on load.
  • Fixed case where cables could become invisible.
  • Fixed clients mining causing critical error on server
  • Disabled Position message updates for items hidden in slots.
  • Optimised Dynamic item network message by order of magnitude. Bandwidth reduced from 200KB/s to 20KB/s on test case.
  • Fixed Clients Destroying items that are out of bounds (only server should do this)
  • Reduced Initial Judder of item when throwing on client.
  • Fixed Quaternion must be unit length error on Client.
  • Removed bandaid fix for items being offset (pos/rot) in slots
  • Fixed Helmet being rotated incorrectly on clients when they join
  • Fixed server error when clients connect to saves with a trader landing pad
  • Fixed IC Code on computers getting wiped when client joins.
  • Fixed Clients don't get correct IC message errors.
  • Fixed build error
  • Fixed WirelessPower not working on Clients.
  • Changed Config Cartridge to run on logic thread.
  • Fixed IC source code not getting sent to clients in certain cases.
  • First pass on fixing traders for clients
  • Added console command 'steam' to check if Steam is initialised and if DLC is valid for user.
  • Fixed NRE Error thrown by Jetpack on respawn as client.
  • More NRE checks when leaving game.
  • Fixed Hash display values being inconsistent on client.
  • Added null/destroyed checks in CameraController. Causes a lot of NREs when leaving game
  • Fixed Several edge cases where Atmospherics thread could break on load (Thanks @GamersCircle).
  • Removed null checks on string binary writer
  • Fixed client side error when a null string is passed over the NetworkUpdateType
  • Fixed NRE when building on client with empty off-hand slot.
  • Fixed Logic displays, dials and a number of other logic devices animating based on the previous setting rather than the current setting on Client.
  • Fixed build error
  • fixed debug overlays
  • fixed font/spacing on the console
  • Fixed ModularRockets not loading in correctly.
  • Fixed ProgrammableChip not syncing.
  • Fixed syncing ProgrammableChipMotherboard device dropdown
  • Fixed cables and pipes doubling up when clients place them
  • Fixed syncing of ProgrammableChipMotherboard
  • Fixed Error on Client when stacking items using mouse control.
  • Fixed placing advanced furnace kit causing NREs with InternalAtmosphere
  • Fixed Occasionally Global atmosphere would be created when mining out sealed rooms underground.
  • Fixed Clients not being sent atmosphere updates when the number of moles of gas in a pipe or tank was very low.
  • Disabled Sentry
  • Fixed an instance were clients were creating atmospheres they weren't supposed to.
  • Optimised Network message for rotatable things (reduced rotation precision on client from doubles to FP16).
  • Fixed a number of issues with clients interacting with logic chips in multiplayer.
  • Fixed Gas Displays and Advanced airlock not working on clients.
  • Fixed Numerous issues with circuitBoards not working correctly for clients in multiplayer.
  • Fixed OnFinishedLoad and OnFinishedThingSync not being called on clients.
  • Fixed InitAllDevices not being called on clients.
  • Added All LogicChip synced variables to byte array message.
  • Fixed items in slots being at wrong rotation when rejoining game as a client
  • Fixed editor issue when playing game without SteamId assigned in inspector
  • Fixed NRE for InternalAtmosphere on Jetpack and Canister
  • Removed redundant IsOutgoingQueueFull check (Thanks Baughn)
  • Fixed issue where GameMetaData wasn't reaching new joining client as current joining client is processing.
  • Increased the acks and max sent message queue size values
  • Added unreliable network channel for handshake messages
  • Fixed Atmosphere error caused by client's room manager creating atmospheres.
  • Re-organised Bitflags for network update types.
  • Fixed MusicMachines, CircuitHousing, Logic BatchReader not syncing to clients.
  • Fixed ores being able to have negative stack values
  • Fixed BitArray de-sync edge case that would cause "Error: Thing is null during network update. ReferenceId:0".
  • Fixed damage states not syncing on client join
  • Removed intialising steam sdk in unity editor.
  • Fixed LogicMotherboard syncing on join
  • Added missing null check
  • Fixed data cable not syncing to client on computers
  • Fixed Log spam on clients when client deconstructs pipe and splits a network.
  • Fixed Sanitised pipe network atmosphere messages to exclude some bad data.
  • Stopped clients from processing network updates for objects they have authority over
  • Fixed Adding a pipe onto a pipe network using wrench tool deletes all gas in the network.
  • Improved atmosphere network message to only send delta states. Reduced atmosphere message size by 70%.
  • Fixed client -> server interactions syncing properly. (still a little more work to do in this area)
  • WIP commit for shifting atmospheres to only sending delta states over network update.
  • Moved Atmosphere classes into their own files.
  • Refactored FilterGas functions.
  • Optimised Atmosphere network message from 76 to 50 bytes per atmosphere.
  • Fixed welding torch flame stays on when gas runs out.
  • Added HalfToFloat operation to RocketMath. returns max or min value when and the value is out of bounds rather than float.infinity.
  • Changed BurnedPropaneQuantity to burned propane ratio. (used to display flame visualizers).
  • Refactored previous weeks work on LogicMotherboard significantly improving how data was syncing
  • Fixed Case where solar panels could throw NRE "Error: Thing is null during NetworkUpdate. ReferenceId:0".
  • Changed AudioSequencer and Landing pad to use Setting/Processing update types instead of interactable update type for auxiliary interactions.
  • Removed old network messages from logic units.
  • Fixed Case where damage update could cause Error: "thing is null during NetworkUpdate refId:0".
  • Changed Damage state to use a static read/write functions to allow the message to be read even when DamageState is null.
  • Fixed Items that are queued for destroy no longer send network updates.
  • Fixed computer scene dropdown contents layering issue in Logic Motherboard
  • Fixed Water bottles being created 66% full and water bottles spawned in creative mode being 166% full.
  • Fixed ChuteNetworks causing clients to fail joining.
  • Aligned ChuteNetwork merging logic with other network types.
  • Fixed Some solarPanels had OnOff and Open interactions added in error. This could cause them to be disabled.
  • Fixed build error.
  • Fixed Bug where devices would not connect to cable and pipe networks if the cable or pipe was placed AFTER the device.
  • Fixed Several cases during network message preparation that could cause the following Null Reference Exception "Error: thing is null during network update. ReferenceId: 0".
  • Fixed Things not un-dirtying their Interactables after sending a network update causing them to send the same update message forever after.
  • Fixed DamageUpdate type not being cleared following sending a damage update causing damage updates to be send continuously for damaged items.
  • Fixed A number of items that has animators added to the prefabs in error.
  • Added ConsoleCommand TestByteArray (Editor Only) This will run the read and write method on each thing locally to confirm that the methods are parallel. You can enter a referenceId if you wish to test just one thing and not them all
  • Fixed server breaking when the message pool is filled
  • Fixed syncing issues with LogicMotherboard. Still a bit of work left on this though. Dropdown values aren't updating on client and Dropdown content UI sorting orders are all whacked.
  • Fixed Logic Readers with no assigned device will cause server to throw an error.
  • Fixed Joining a save game as client getting stuck because some pipe/cable networks were being cleaned-up in error.
  • Fixed PipeNetworks not splitting their atmosphere correctly when split (bug introduced in previous build).
  • Fixed Error thrown on clients when constructing portable gas tank.
  • Changed Sentry configuration
  • Fixed Issue where Clients pipe networks would become de-synced from Server when pipe-networks were joined or merged or when pipe were merged.
  • Improved network performance by optimizing data types (created vector/quaternion half precision variants) for dynamic thing physics updates
  • Fixed Issue where Clients cable networks would become de-synced from Server when cable-networks were joined or merged or when cables when were merged.
  • Fixed Server sending update messages for things that are in the process of being destroyed. Should help to fix some cases of the "Thing is null during update" error.
  • Reduced time taken to write network messages by a factor of 10
  • Fixed NullReferenceException that could be thrown when receiving internal atmosphere updates on client.
  • Made "Thing Transform is Null" error more verbose for tracking
  • Fixed Visual bug where terrain would appear to be fully lit (even at night) this could happen when a certain grouping of objects were all visible that the same time.
  • Changed Moved Terrain Mesh colliders onto child game-object on terrain layer. Asteroid parent (which contains the mesh) is now on the default layer.
  • Fixed Fridge powered atmosphere not loading in correctly.
  • Refactored Cable, Pipe and Chute networks to use the new referencing system.
  • Fixed a number of string generation allocations.
  • Fixed AirConditioner initialisation error preventing save from loading.
  • Second pass on batch mode (dedicated server). Important console commands have not been added yet (save, load, kick, etc.)
  • Fixed issues with logic boards settings not syncing properly over network
  • Fixed Unable to read Internal atmospheres with Tablet on games saved on or after revision 16126. (You are fine to continue playing on any saves made after rev.16126, the tablet will work in them now)
  • Restored Threshold for world atmospheres to be removed to original value. Was potentially causing some strange behaviour.
  • Fixed Smaller volume internal atmospheres not interacting with global atmosphere for thermodynamics. e.g. players suit atmosphere was not being heated by Venus global atmosphere.
  • Fixed Bug where a new ActiveVent would not pump gas until its mode switch was toggled.
  • Set up framework for running the game in batch mode
  • Fixed Placing pipe causes atmospherics error.
  • Fixed Possible race condition when registering atmospheres from the thread.
  • Fixed Atmospheres not being deregistered from the IReferencable collections.
  • Fixed Errors causing saves to fail to load and/or clients fail to join caused by Fridge, VendingMachineRefrigerated and IceCrusher.
  • Changed networkUpdateType on Atmosphere to uint.
  • Changed All atmospheric Calculations including clean up of atmospheres now handled on Server.
  • Added IReferencable to atmosphere. Each atmosphere now has a unique ReferenceId assigned on creation. This will allow us to only send the delta state of the atmospherics sim to clients.
  • Changed world atmospheres now exist a bit longer before they are removed. was when within 0.1mols of Global, now 0.01mols.
  • Fixed Greatly reduced the number of new WorldAtmospheres being created. Previously atmospheres around atmospheric items/ devices were being created and deleted each tick.
  • Fixed items burning in the world would sometimes remove oxygen from (and add energy to) the planets global atmosphere.
  • Fixed items sometimes not getting deleted when damage was at max.
  • Fixed new debug overlay not displaying
  • Fixed terrain and ores not spawning in as you move
  • Fixed sun orbit period not being synced to client
  • Fixed weather events not syncing to client
  • Fixed battery structures not display not syncing when joining
  • Fixed grenades not working
  • Fixed jetpack syncing issues on client
  • Fixed slotted items not being in correct position sometimes.
  • Added ThingTransformPosition and ThingTransformLocalPosition properties for easier debugging of transform positions
  • Added check for MoveToSlot if its already in a slot.
  • Fixed console input not working with new debug overlay
  • Fixed in world debug tooling and implemented the existing atmos debug tools from the console
  • Added null checks for local human in keybinder. Was causing NRE in start menu
  • Fixed respawn modal not showing after giving up when unconscious
  • Fixed respawn modal showing when dead body has decayed
  • Fixed health damage still decrementing after rehydration
  • Changed keybinding stage to be set in KeyManager static way rather than binding to Human.
  • Removed removing key binding if not is local human. Instead just ignoring
  • Changed OcclusionManager threaded work now runs once per frame.
  • Fixed Error where a thing could be created with a referenceId of 0. Things are now added to the AllThings list once they have been registered. (previously added on awake)
  • Fixed an error where bad data was being added to the new things list. This is now populated only when an thing gets assigned a new refID and a client is connected.
  • Fixed (potentially) for keybinding state issues when Stationpedia/other input windows is used and other areas e.g respawning.
  • Added new class in clump all the Human inputs together for easier debugging.
  • Removed ConsoleWindow closing when clicking away from it.
  • Fixed a number of compiler warnings.
  • Changed Thing.PackageJoinData to iterate over the list of things rather than the list of IReferencables, it was causing a strange compiler error.
  • Removed INetworkSerializable interface
  • Added IReferencable, generic interface for referencing different types
  • Fixed pooled chunks causing invisible colliders for clients, as well as floating chunks when loading a game
  • Fixed precision placement on client
  • Fixed invisible chunks blocking clients after re-joining a server
  • .....
    + SIX HUNDRED MORE ON PASTEBIN!
Stationeers - El Oshcuro
About two weeks ago, after months of hard work refactoring some core systems of Stationeers, we've gotten the project to a point where we felt comfortable releasing something to the community.

We’ve password protected the Beta Branch and want to make it clear that this is still a work in progress. To take a look at what we’ve done so far you can unlock the Beta Branch on steam using the password: "therewillbebugs".

Community member GrunfWorks produced an excellent video that outlines some real world results for performance improvements received on their saves, varying between 30-90% improvements.

So keep in mind: there will be bugs.



How we did this

With one of our smaller projects, Art of the Rail, we experimented with extremely optimized multiplayer built from the ground up, along with custom approaches to rendering similar to that taken by games like Cities Skylines. This offered a tremendous improvement, so we set about pulling out the existing systems and replacing them.

This was a huge effort, but well worth it. We also used this as a chance to do a lot of cleanup of existing code. This helped improve our memory management and framerate, for both single player and multiplayer.

Checkout Art of the Rail for more information on the source of some of our ideas:

https://store.steampowered.com/app/1286190/Art_of_the_Rail/

With these changes in place we can begin the foundations of making the game what we hope it can be. We will be releasing details on changes we will be making as a rough roadmap when this beta branch becomes the main branch of the game.

What to expect in the beta branch
Bugs

Single player is feeling really good, through the refactoring even some old bugs have been resolved, however it’s inevitable that some new issues will have been introduced. Multiplayer is still in heavy development and there are still many issues that we’re working hard to fix.

Performance improvements



We’ve radically improved performance. Simply removing the Unity multiplayer API resulted in a good performance boost(even in single player), but we’ve also reduced the performance impacts coming from excessive memory allocations, removing or reworking some inefficient systems, as well as changing the way we render some things in the game.

Performance is affected by a lot of factors in and out of the game, here are some examples of the performance difference between the Stable branch and the Beta branch running on an i9-9900k, AMD 5700XT at 1440p resolution with default settings applied:

Masoneer’s Vulcan Base

This base is heavy on the logic side of things and we were able to make massive gains in this area.




Evil Cows on Europa

This Europa base has had big gains as well, however the number of lights in this base is high meaning that the cost of shadows has a significant effect. In the future we will attempt to resolve the high cost from the shadows.




What not to expect...for now
Dedicated Servers

The changes we made to multiplayer mean that we need to completely reimplement the dedicated server. This is something we’ve wanted to do for a while anyway. It shouldn’t be a big task but it has to wait until we’ve finalized all aspects of the multiplayer refact. The new dedicated server will be far better than the existing one and more inline with what you’d expect from a dedicated server.

New Content

While there will be exciting new content in the future we’ve been 100% focused on these refactors and performance improvements.

Server List

For now you will need to directly connect to your friends using their IP address or by using the join a friend options through Steam or Discord. The server list will be making a return before we release to the default branch.

What’s Next?

We don’t have a date or deadline for when this update will be ready for the default branch. We’re doing regular playtesting and when the whole team feels it’s ready we will release it. What we are planning on doing is doing more of these steam posts to keep you up to date with where we’re at!

So stay tuned.

https://store.steampowered.com/app/544550/Stationeers/
Feb 4, 2022
Stationeers - sknightly


We’ve made some big decisions and big improvements which we believe set Stationeers up for a great year in 2022.

While we’ve been quiet for a while, this isn’t because we haven’t been working on Stationeers. Quite the opposite. In October last year we did a strategic review, and identified key areas of technical debt that if we took the time to redo would lead to big gains.

However, it meant we paused our monthly updates while we replaced some fundamental systems (such as networking). This decision did not come lightly but we felt it was best investment for the long-term success of Stationeers. Once we started refactoring the multiplayer we realised there was more work than anticipated, but it also created the opportunity to tackle other key systems and go more in-depth than originally planned.

While we don’t have a game update today, we can share what we’ve been working on and the results. This work will be a major milestone on our path towards Stationeers 1.0.

We are on the road to completing the biggest changes in the project since it began. This involved us rebuilding the way we handle multiplayer from scratch, adding a very efficient batched rendering approach for graphics optimization, and a massive cleanup of how memory is managed.

Rebuilt Multiplayer from Scratch


Stationeers was originally built using Unity’s High-Level Multiplayer API (HLAPI), a perfectly reasonable choice when the game was first made. However, as time went on and Stationeers grew beyond what we initially thought it would be, we found that the HLAPI became a bottleneck. We started to push the limits of what HLAPI could cope with. The effects of this could be seen when you had a save with a lot of things - every extra player would put a massive amount of extra load on the server, causing desync and failed connections.

In October last year we decided to stop, rethink and resolve this foundational issue. After serious deliberation of many different options we decided that, based on experiences on other RocketWerkz projects (such as Art of the Rail, which was designed for the tremendous scale like seen in games like Factorio), to build our own bespoke solution just for Stationeers.

The new system sends less data between players, will be more reliable to establish a connection and will allow larger groups to player together smoothly.

However, multiplayer was baked into how Stationeers was made from the start. This meant that even the task of removing multiplayer was already a big task. It turns out it was bigger than we originally anticipated!

Last year we successfully removed all traces of the HLAPI and had the game working again as a single-player experience. This year we’ve been busy doing the hard work of rebuilding multiplayer and the new system will be in the next game update.

Graphics Optimization: Batched Rendering

Screenshot from Masoneer#5778 Vulkan Base

Since we were not pushing monthly updates we saw this as a good opportunity to do further experiments in other problem areas of the game. One of those was that Unity’s batched rendering wasn’t doing the best job for how Stationeers is structured.

A Stationeers map can have thousands or even tens of thousands of things in the game, many of which are exactly the same item repeated. When these are sent to your graphics card to be rendered, if two things are the same with the same mesh and material then we can batch them and get performance gains.

We’ve been working on our own system that focuses on the high volume items in the game such as frames, cables and pipes and have had great results.

Metrics


These changes combine to double framerate on large bases!
To give you an idea of what kind of impact this work will have on Stationeers, we tested it out on community member Masoneer's large Vulkan base.

Removing the HLAPI saved 5ms from the time it takes to process each frame. This is approximately 14% of the time taken for a frame.

Removing redundant Animator components reduced the time to process a frame by about another 6.5ms (an additional nearly 20% optimization).

Additionally, the game was making significant memory allocations every game tick that would then need to be cleaned up. This is an expensive process that impacts performance in a big way. We reduced the amount of Garbage Collection from 500KB to under 1KB

Stationeers' Bright Future
You’ll get to try out these performance improvements and the new networking system in the next update (coming soon, once through testing).

Now that we have clearly defined technical boundaries we can start to define the gameplay boundaries through game design. We often discuss “what is Stationeers?” internally and “where do we want this game to go?” Over and over again these conversations ended in frustration over the uncertainty of the technical limitations. Now that uncertainty is being resolved we look forward to publishing regular updates again.

While we still don’t have an exact date for you, we’re all very excited to share this work with you and to get back to making Stationeers everything that it deserves to be.
Oct 31, 2021
Stationeers - Not Simon
Please note: since the last major update, loading a game with a DLC character would cause an error resulting in that character being replaced with a human without a suit. This has now been fixed and those old saves will now correctly spawn the DLC character. Now that this error has been corrected, new saves made since then with the DLC characters will not load correctly.

  • Fixed scene overriding trader panel fix
  • Fixed trading panel not displaying
  • Fixed in game code editor not displaying after entering and leaving and then entering a new session.
  • Fixed Error when disconnecting pipe from water bottle filler.
  • Fixed Render distance on Heat Exchangers.
  • Fixed Sorter Motherboard white-list dropdowns displaying behind other sorter buttons (meaning that you couldn't select those items)
  • Fixed Removed individual wreckage items from sorter. (you can filter all wreckage items using the Wreckage type).
  • Fixed Reduced lag on Sorter motherboard UI Interaction.
  • Fixed Intermittent Collection Modified Exception caused by multiple omni power transmitters.
  • Fixed dedicated server hang / crash
  • Fixed Old saves using DLC characters (HEM Droid / Zrilian) change character to Human with no suit on load.
  • Fixed Saving a game with a corner locker closed would cause the items inside to become permanently invisible until it was deconstructed.
  • Fixed Intermittent Error spam caused by Omni Power Transmitter.
  • Fixed Area Power Control adding huge amounts of heat to atmosphere.
  • Added Small and Large Insulated Liquid Tanks. Construct them using ItemKitLiquidTankInsulated built with the PipeBender.
  • Fixed Unable to interact with all IC Circuit holder items in the programming motherboard drop-down.
...