Stationeers

Project Clinic | Developers Playtest

While we do regularly do playtests, it can be easy in the hustle and bustle of chasing down bugs or working on big features for the team to miss the full experience of playing the game. So we initiated a "project clinic". Think of this like taking the project to the Doctors, and then treating as much as possible right then and there, and scheduling followups with specialists for anything you can't. So the project has had all it's shots, and a whole heap of a lot of little things fixed and tidied up.

The rise of our "Interop" Layer


Our "interoperability" layer is used for the first time to deploy a new version of "RocketNet", our internal multiplayer technology


For our playtest we played extensively with both SteamP2P and dedicated servers, with up to eight of us playing at any one time. As part of this we identified a number of issues that we needed to fix. Some time ago we made the decision to cut our own path and do as much as possible ourselves, particularly on the network and simulation front. We have our own internal "enterprise" team who worked on taking "RocketNet" as a concept and implementing it, first in our unreleased project "Art of the Rail" and then in Stationeers.

After releases of our games, including Stationeers, we have always felt that where we had the agency to be able to solve issues - we could. So we have been bringing as much as possible under the control of the studio, which involved removing steam functionality and replacing it over time with our own. The goal being that anyone can play with anyone (including pirated copies of the game), and that the game will be able to outlast those who work on it, the studio, and even steam.

This week not only have we improved our technology for "RocketNet" and "RocketImgui", but it has been done so using a newly developed Interop Architecture. This allows us to introduce new data architectures and streamline how the C++ plugins we develop (think, extremely high performing code but very complex to write and maintain), and the C# code at the game level (simpler, but not as performant code). Not only were the enterprise team able to quickly iterate to fix the issues we identified, but this new interop architecture worked flawlessly. This opens the way for us to move more and more of the game outside of game engines the studio uses, and develop specialist and highly performant code for areas we need for simulation and more.

Recently you may have seen layoffs at Unity, the maker of the Engine we use to build Stationeers, and also controversy around games made with Unreal Engine such as Redfall. We feel the decisions the studio made over the past few years to ensure we could build survival games that can truly scale, are now proving to be the right calls.

Clinic Highlights



Enhanced Networking and Multiplayer Stability


In this update, we have focused on improving networking and multiplayer stability. Players will now be able to reconnect to a lobby/game after leaving, and we've fixed various issues with server connection and Steam P2P clients. Additionally, we have updated the RocketNet plugin to fix issues with max player limit, ensuring smoother gameplay.

Enhanced Repair System and New Repair Options


Players can now repair walls and frames using the tools and materials of their current build state. Damaged items like Solar panels, Suits, and Robots will display required materials in their tooltip for repair, enhancing usability. Additionally, the repair speed for glass on solar panels has been increased, and Duct Tape Mk2 repair speed is now faster, making maintenance more efficient.

New Logic System Additions and Updates


The latest update brings new functionality to the logic system, including the addition of color and vent enum constants to assist with referencing in scripts. We've also introduced:
  • 'Load Batch Named Slot (LBNS)' instruction, which enables loading into a register matching device and name hashes using the provided batch method.
  • 'Set Slot (SS)' instruction, which enables you to write to slot contents for the first time. Note that the slot itself must support it. Documentation on which slot types support what LogicSlotType is limited, this will come with future updates. A good example is in Suit Storage, you can open and close a helmet.
  • 'Set Batched Slot (SBS)' instruction, which is the same as the above instruction, but allows you to do it to batches of devices.
These enhancements provide players with more options and versatility when working with logic systems. A big thank you to content creators such as "CowsAreEvil" and others who have been doing great deep-dives into all the possibilities that come from our new systems.

Solar Irradiance and Lighting Improvements


We've addressed an issue with Solar Irradiance for Air, which was using the default SolarScale and not adjusting for different worlds. This led to heating discrepancies due to solar radiation. Now, the heating of air will be more accurate across various worlds. Moreover, we've made significant improvements to the First Person Helmet, reducing clipping issues by adjusting the near clipping plane. Additionally we have done a full pass of materials, shadows, and lighting settings to unify and clean them up. This has resulted in performance improvements and dramatically better shadows in many circumstances.

Sleeper, Cryo, and Unconsciousness Improvements



The sleepers now actually put you to sleep and we have iterated on the sleepers to ensure that, so long as they have power and their atmosphere is maintained, they will keep players alive. Survival, and mechanics around this, will play a huge part in a massive series of updates we have planned dedicated specifically to dramatically expanding the role, function, and focus of survival in the game. All the updates we have done so far, and before, lead heavily into those updates.

Pipe Cowl and Wall Vents



Wall vents mix two atmospheres, say on each side of a wall or floor, without requiring any pipes. The Pipe Cowl is useful when you want to exit gases, but you don't want to have to place a passive vent on on a frame.

Advanced Tablet upgraded


The advanced tablet now contains an IC slot and a speaker. So you can play sounds on it using the SoundAlert LogicType. Additionally, it can access any humans suit slots (including toolbelt, if advanced), via the "device" notation. This can be combined with the new set slot and set batched slot instructions.

Playing Sounds on Items


Any items supporting SoundAlert allow you to play sounds on them via logic. Want to have your suit warn you? Advanced tablet (see above)? Now you can! Look for the sound definitions in the ingame variable listing, such as Sound.Alarm1, and so forth.

Solid Fuel (Hydrocarbon)


The smelting system has been extended to allow recipes to define atmospheric requirements to create something. Our first example of this is taking Hydrocarbon, commonly from Coal, and putting it under immense pressure and temperature with only Volatiles in the atmosphere. This will allow you to produce Solid Fuel, which stacks much higher and burns for far longer in the Solid Fuel Generator.
Modders note: if you don't want the RequiredMix to have to be pure, remove the "Pure" requirement, as this forces only the listed Gas Moles to be in the atmosphere to be valid

Quality of Life Updates and Bug Fixes



We've made several quality of life updates and bug fixes in this update, such as adding a direct connect button to the join server window, improving Stationpedia's search functionality, and optimizing the WeatherManager to use UniTask instead of Coroutine for item damage. Furthermore, we've fixed numerous bugs, including issues with deep miner save data, laptop interactions, and audio playback. We've added a whole host of tooltip improvements to help with accessibility, and even fixed some long standing annoying stuff like some cans being rotated differently than others.

Your support makes this possible


Over the last year, we’ve completely refactored the net code making multiplayer more stable, we’re continuing to improve the connectivity, and we’ve improved some big systems to allow us to bring you better content and new game loops. All this while transitioning to a weekly update cycle.

All the community support, feedback, and involvement have made this possible. So thank you!

If you like the progress we have made, please consider taking a moment to leave a positive review. This makes a huge difference to the project. We've been working hard for the last five years, and feel confident the game has substantially improved over this time. Many projects steer clear of the hard tasks, and we are proud to have taken them on.


Additionally, you can support us by purchasing DLC that we've made to allow those who enjoy the game to support us, and in return get something a little fun to use in-game.

https://store.steampowered.com/app/2089290/Stationeers_Human_Cosmetics_Pack/

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

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

Hotfix deployed v0.2.4039.19189


  • Fixed tooltips for repair not showing up.
  • Fixing linux dedicated server missing dll issues STAT-1794
  • Fixed hydration increasing when your suit is empty. This should also fix the issue of hydration decreasing dramatically slower when breathing very cold gas.
  • Fixed Logic Dial knob rotated incorrectly by 90degrees.

Hotfix v0.2.4036.19180


  • Fixed mining belt Mk2 not working with Mining Drill correctly.
  • Fixed Arc Furnace new collision was preventing accessing the entry slot by hand.

Changelog v0.2.4035.19177


  • Fixed Storm Visual and Audio Effects would play in rooms that where not really storm accessible if an unfinished frame was located in the square. This occurred because if a cell grid object existed, wall checks would not be undertaken. Now wall checks will be undertaken if a found grid structure CanPassAir is true, and if so, don't allow.
  • Optimized CanAirPass state checking for structures and doors, reducing memory GC churn and unnecessary list generation and iteration.
  • Updated all things with glass to use new glass materials
  • Updated all glass materials to use new transparency shader
  • Fixed possible the characters in multiplayer spawning and being invisible for their body mesh.
  • Added custom transparent shader that does not cast any shadows
  • Changed Increased print times for Battery and Large Battery 5s to 50sec, and 10s to 100s respectively.
  • Fixed build errors due to editor methods not being wrapped correctly
  • Fixed rotation of some cans, spray cans, filters, and seed bags were facing so their front was obscured when in lockers and crates. Now they face forward so they are easy to read what they are.
  • Fixed deconstruction an Advanced Furnace full of reagents would cause them to be created automatically as ingots. Now correctly spawned as Reagent Mixes.
  • Removed sleeper fog effect, will do this with a shader in future instead
  • Fixed Can't read LandingPad atmosphere with logic.
  • Fixed error when loading game with old sleeper variant.
  • Fixed Arc furance prefab throwing error when saving game
  • Added fog effects to Sleepers.
  • Tweaked lighting shadow values and added some optimized shadow meshes for some of the lights.
  • Fixed some keyboard actions could be undertaken while unconscious or asleep. Restricted input actions available to player while asleep and additionally cleaned up some Human code, added caching of key components.
  • Fixed deadlock when attempting to apply leak effects to a suit when a player entity is expected by could not be found.
  • Code Clean-up for Sound Alert code. Cached hash values for audio clips and moved duplicate code into static function.
  • Added ISoundAlert interface.
  • Fixed Sleeper and Cryo DisplayName was being changed when actually it should show up in the tooltip itself. Added a message on both that is localizable to the tooltip, not changing the DisplayName of the object itself as this would cause issues when renaming.
  • Fixed incorrect parameter definition LOKAL to LOCAL in german translation files. Specifically effecting stacker.
  • Added sleeper occupant name to DisplayName so that tooltips show the name of the occupant in the sleeper.
  • The sleeper and cryo tube tooltip will now show the occupant name when they are occupied by a player
  • Added caching of KitItem SkinnedMeshRenderer. Should reduce the cost of applying skinned meshes when players change clothing.
  • Fixed a varienty of rendering issues associated with changing clothes during logging in on multiplayer or moving in and out of rendering range. Character uniform or suit would be invisible as the character was occluded at the time the change took place.
  • Changed Moved Head Lamp recipe to Tool Printer.
  • Fixed bug where you could not interact with sleepers while wearing a suit
  • Removed un-used OnEnitityDeath Event.
  • Fixed when clicking GiveUp when unconscious player would revert pack to being alive instead of respawning new character.
  • Fixed Null Error when another client character was occluded.
  • Fixed Volume doesn't update on playing alert sounds on HardSuit, Helmet, PassiveSpeaker, AdvancedTablet.
  • Added color state indicators to sleepers. Will show White when closed but no occupant. Green when occupant and is alive. Red when occupant is dead.
  • Fixed MultiConstructor kits could cause exceptions if the LastSelectedIndex was greater than the contents. Added sanitization checks to remove any nulls.
  • Added proper tooltip to indicate that you can upgrade the manufactory devices rather than just a construction step.
  • Changed the tool use with Printer mods to be the screwdriver, as the welder made no sense and was not intuitive.
  • Fixed some glass casting shadows and causing weird pixel issues.
  • Added automatic network state checking for atmospheric devices when in an error state due to network changes. As we optimized the game it reduced the time between an error on a device due to a network change and the creation of the new networks. This meant that devices could stay 'Error' till they were turned on and off. Now the Atmospherics Tick will check for a new network automatically when needed.
  • Fixed SoundAlert when played on items would continue even if item was off or unpowered.
  • Added IC slot to Advanced Tablet along with a speaker. The Advanced Tablet has access to the root human, and provides access to the slots on any root human via the devices (d0, d1, etc…). This means you can use the Advanced Tablet to play a sound when something happens to the player. Say they walk into an airlock without a suit and helmet on, you will be able to play a warning sound.
  • Replaced some enum casting names to avoid collisions. This may break some scripts! SoundAlert is now Sound, and is not directly cast as part of the processor. It is a constant type. Additionally, SlotType is now SlotClass. Please check the in-game variable help for a complete listing of any changes.
  • Fixed Glass Door shows interaction buttons before door is completed. Now correctly hides the interactables until door is properly completed.
  • Added ability to repair the ChuteBin and Deep Miner.
  • Fixed overhead lockers were disobeying the lack of RequiresFrame, despite not requiring it. Now overhead lockers can be correctly placed without requiring a frame, allowing them to be mounted to walls easily as they were intended to be.
  • Fixed Upgraded Manufacturing devices (such as autolathe, electronics printers, etc…) show their buttons for access while they are booting. Now their screen based buttons won't be accessible until their screens have correctly booted.
  • Added Pure Gas rule option for MoleMixtures. Currently only implemented for Solid Fuel (Hydrocarbon). To make solid fuel, you must have high pressure, temperature, and a mixutre of only Volatiles as well as Hydrocarbon reagents inside the furnace. Displayed in the Stationpedia automatically for recipes.
  • Fixed MoleMixture requirements not scaling with output produced. Now the quantity is correctly scaled for the requirements.
  • Added ItemPipeCowl made on the Pipe Bender for making Pipe Cowls for placement at end of pipes.
  • Added Wall Vent. Available on the new Kit (Passive Vent). This has no pipe connection, but it will allow two atmospheres to be connected and mix them. This is useful if you have made a series of rooms that would otherwise not be mixing atmospheres.
  • Added Pipe Cowl to Kit (Passive Vent). This is similar to the existing passive vent, but useful to place at the end of pipes, rather than having to be mounted on the wall.
  • Replaced ItemPassiveVent with ItemKitPassiveVent, that is a multiconstructor. This kit has a new mesh and has Pipe Cowl in addition to the Passive Vent.
  • Added players cannot enter a Sleeper or CryoTube while wearing items that provide an interior atmosphere. A tooltip will indicate why you cant complete the interaction. This avoids state issues of being inside an atmosphere while wearing something that prevents that atmosphere from keeping you alive. This allows a number of state and UX issues to be solved.
  • Added players will receive stun until they fall asleep inside a Sleeper or Cryotube, and become unconscious. This potentially fixes state issues that were preventing the cryotube from healing properly. There is now a slight difference between being unconscious and being asleep. When inside a sleeper and sleeping the respawn dialogue will not show.
  • Added players inventory windows will be hidden while unconscious.
  • Fixed humans were not correctly closing their eyes when unconscious or dead, and would continue blinking.
  • Added Stun damage will reduce maximum speed. This means you will walk slower the more stun damage you have.
  • Added SortingClass enum lookup for Slots in instructions. All slots for any ILogicicable Device will be able to report the SortingClass of their enclosed item. Useful for manual mode on sorters.
  • Fixed LogicSlotType.Pressure was returning in Pa, not KPa, and doing so inconsistently as tanks were reporting in KPa. This may affect some scripts, but it was inconsistent so needed to be changed.
  • Added SBS 'Set Batch Slot' Instruction for IC10. Same as SS 'Set Slot' Instruction but applied to a batch via the device hash. Current use case for testing was closed all helmet visors in suit storage. Future options to be expanded.
  • Added SS 'Set to Slot' instruction on IC10. This sets a value to the provided variable on the occupant on a slot. Only current use case is really the Suit Storage and Advanced Suit local IC. Future changes to Circuitboards will have more functionality here.
  • Added Open, On, Lock, LogicSlotTypes. Only usabled on some devices, those that have Helmet or other similar slot types. Currently not an easy way to verify what devices allow you to write. This will be developed later.
  • Extended ILogicable to Toolbelt and Miningbelt Mk2s and all Power Tools and batterycells to allow them read/write when referenced in the advanced suit.
  • Added d2 mapping to Toolbelt Slot for the Hardsuit. The toolbelt item will need to be ILogicable, so only the Mk2 toolbelts will currently work here.
  • Revised the SuitStorage LS instruction handling as there were many issues with it. This is a significant change so it may cause some scripts to work differently.
  • Added Wall Flat Panel Open for use with ladders.
  • Changed Platform Gratings to be crafted off the Floor Grating kit, rather than the ladder kit.
  • Fixed collision on sleepers was causing physics issues when exiting sleepers in some circumstances.
  • Added new Ladder Platform mesh that works with the floor grating mesh better.
  • Added variant for Ladder Platform that has the panels rotated.
  • Fixed exiting structures as a client would exit in the slot position, not the exit position. This could results in clients getting stuck. Now clients exit in the correct exit position for the device.
  • Changed construction and deconstruction for sleepers and cryo to be in line with others of similar type. Uses plastic sheets instead of iron sheets and drill instead of screwdriver for first stage deconstruction.
  • Changed Padded walls to take Plastic instead of Steel Sheets
  • Fixed hazard color uses a different yellow than game base yellow
  • Fixed emotes from clients not being sent to other clients
  • Fixed dedicated server attempting to play trader sounds.
  • Fixed inconsistent shadow bias settings for lights could cause artifacting for some shadows. Now a fixed shadow bias is set across all thing lights and the world sun light.
  • Added atmospherics whiteware devices can be repaired by using electronic parts and screwdriver.
  • Added able to repair Airlock Gates using Steel sheets and a welder.
  • Fixed lens flares were hexagonal due to their value being overflow. Tweaked the values to be aligned with the new nearClipPlane.
  • Updating RocketNet plugin to new version to fix issues with max player limit STAT-1794
  • Fixed Solar Irradiance for Air was using default SolarScale, not being adjusted for different worlds. This means the heating of air due to solar radiation was higher than it should be for some worlds. Users relying on heating via solar irradiance on worlds such as Europa may observe a reduction in how it was, as this value was incorrectly high.
  • Fixed clipping issues with First Person Helmet by reducing the near clipping plane.
  • Added Solar Irradiance to the DayLight Sensor. Now the sensor will report the local solar irradiance value to the logic system as well as in the tooltip.
  • Added ability to repair the Liquid Pipe Radiator and passive vent.
  • Improved network console command
  • Removed logging of all prefabs on world manager awake
  • Fixed DynamicGasTankAdvancedOxygen deletes gas when a gas canister is put in the slot.
  • Fixed Suit not updating its current state when not on a human player. Now state is updated whenever inventory changes and any status coloring is updated accordingly.
  • Added Load Batch Named Slot (LBNS) instruction. This will load into a register matching device and name hashes, using the provided batch method.
  • Fixed LBN instruction was missing description help text.
  • Added repair tool options to more devices. These will show up in the tooltips for things when damaged.
  • Fixed suits not showing correctly when moving in and out of render distance.
  • Fixed recycling food gives you back plant reagents. Example: Put in tomato soup, get a tomato. Now INutritional is not recycled.
  • Fixed child items not being correctly sanitized when being recycled.
  • Added repair tool options to many devices and structures such as autolathes, doors, airlocks, and lockers. These will show up in the tooltips for things when damaged.
  • Fixed loading in with suit or armor in your hands, is treated as in slot for rendering purposes causing weird suit state for entities.
  • Fixed toolbelt mesh was being enlarged when holding a suit when it was not in the correct suit slot.
  • Fixed marine armor mesh would stay on character when armor was taken off. Now the Armor will correctly be removed from the players renderer when the armor is dropped or taken off.
  • Fixed some issues associated with suits when players spawn in. There may still be some bugs existing, but this should fix at least some of the instances where suits are incorrectly colored or uniforms not rendered at all.
  • Fixed decay not being paused in cryotubes and also fixed the issue where, when dropping an almost decayed body, they could explode into a skeleton immediately
  • Removed SoundAlert reverts back to 0 after playback finished as was breaking dedicated server.
  • Fixed player count not being sent in pings to server
  • Fixed Marine Helmet behavior was not consistent with other helmets when entering suit storage. Now light will be automatically turned off, like all the other helmets and headlamp.
  • Fixed NRE Error when clearing jetpack emissions.
  • Changed (kit)SDB Silo from electronics printer to Autolathe.
  • Changed (Kit) sorter build time from 1s to 10s.
  • Fixed AdvancedSuit and Helmet not syncing SoundAlert to clients.
  • Changed pipe valves to use new animation component.
  • Added direct connect button to to join server window. It is only interactable when a valid IP address:Port is entered in the IP:Port field.
  • Removed Direct Connect function from Join Server button. It will now only try to join the selected server in the browser.
  • Changed Jon Server button only becomes interactable once a server is selected.
  • Added can add ices directly to dynamic gas tanks. The ice will be exposed to the atmosphere of the tank, and will melt if the melting requirements are met.
  • Fixed Completion ratio on Printers sometimes went over 100%.
  • Fixed another case where Steam P2P clients need to restart the game after failing to connect STAT-1794
  • Fixed Centrifuge and CombustionCentrifuge don't show processing percentage on clients.
  • Fixed ImportingThing and ExportingThing not being set on clients (mainly required for some additional tooltip info client-side).
  • Fixed StructureNetwork Rebuild list was being added to when server was hosting with no clients connected.
  • Fixed StructureNetwork Rebuild list and new Structure Networks list not being cleared on ClearGameAll.
  • Fixed SoundAlert sounds on HardSuit, Helmet and PassiveSpeaker now have the same looping behaviour as the sounds on the klaxon.
  • Added SoundAlert variable on HardSuit, Helmet and PassiveSpeaker will now be reset to 0 once playback of a non-looping sound is complete.
  • Removed logging for when a there is no free audioSource in the audio pool.
  • Fixed Multiplayer de-sync issue on clients when a chute that was connected to two other chutes was deconstructed.
  • Added Debug command for chute networks. "chute network". Similar to the "atmos pipe" command, this will show the the reference ids of chutes,networks and the Occupant if there is one.
  • Refactored ChuteNetwork class to inherit from StructureNetwork.
  • Fixed ReferenceId error on join for the first client when connecting to via p2p to another player hosting the game. New structureNetworks list was being added to when hosting but no player connected.
  • Fixed bug where clients could not interact with inventory buttons such as 'split half' if the item was in a slot with index > 10
  • Fixing bug preventing players from rejoining a lobby/game after leaving STAT-1794
  • Added Ability to play sounds on HardSuit, Helmet, Passive speaker and Klaxon using the "SoundAlert" logic type. See the "SoundAlert" Stationpedia page for available sounds. If setting these values via an IC script the editor will parse the sound names directly e.g. "s db SoundAlert FireFireFire".
  • Added Volume LogicType to HardSuit, Helmet and PassiveSpeaker. Default value is 50, max value is 100.
  • Added Sound channel types can now be overridden in code when playing a pooled audio sound.
  • Fixed Reduced radius of deep miner audio. Reduced the amount of reverb send on deep miner audio.
  • Fixed bug where holding a full stack and clicking a partial stack would not swap the stacks
  • Fixed null ref with tooltip repair state text
  • Fixed Prefab error on load from ItemSolidFuel.
  • Added tooltips for damaged items that can be repaired using ISolarRepairer, ISuitReparier, and IRobotRepairer. Now damage things like Solar panels, Suits, and Robots will display in their tooltip what can be used to repair them, to help with usability.
  • Added Flush variable. This is added to the Helmet as a logic variable, to expose the "flush" functionality to the logic system.
  • Added can repair walls and frames using the tools and materials of their current build state. If they are damaged, will show required materials in the tooltip for repair.
  • Added stacktrace informnation to console as aged text to assist with player bug reporting.
  • Refactored WeatherManager to use UniTask and not Coroutine for item damage.
  • Increased repair speed for glass on solar panels
  • Increased Duct Tape Mk2 repair speed.
  • Fixed a few of english strings had extra "Item" due to batch processing of strings error.
  • Fixed ConditionOperation constants were listed twice.
  • Added color and vent enum constants to assist with referencing in scripts.
  • Added Pixel Light Count slider back to settings and adjust the quality preset values.
  • Fixed laptop was not set as "tool" item type so could not be put in toolbelts. Now correctly added as tool type.
  • Moved Voice Language setting to audio screen and added when the setting is changed, a notification in the new language is played, so the player has an indication of what the new trigger is.
  • Fixed Laptop does not automatically close when in a non-hand slot, causing issues in container slots. Now the laptop will automatically close (turn off) when moved to a non-hand slot.
  • Fixed audio buttons playing sounds multiple times when hovering over
  • Tweaked stationpedia so search bar is always visible
  • Fixed stationpedia bug where navigating back to search results resulted in a blank page
  • Changed Logic dial, Logic Switch, Logic Lever, Logic dial & logic writer switch to use new anim components.
  • Fixed Clients see incorrect values on logic dial when Max setting is set higher the 127.
  • Updated stationpedia description for centrifuge. Added note about de-gassing
  • Fixed bug with deep miner save data duplicating states
  • Fixed Null reference exception on load caused by omni power transmitter change (beta).