Stack Instructions and Logic Sorter
There exists a data storage paradigm in Stationeers known as the "stack". On IC10 chips it exists as an addressable memory space to store data. On the new Logic Sorter, and moving forward on other 'complex' devices, we'll be adding machine instructions that can pass advanced information and configurations to machines. Unlike the static logic types most devices use, and players are largely accustomed to, these instructions are dynamically configured and written to.
What these instructions are very similar to CPU instructions and how to write them can be found on the Stationpedia of a given device. The logic sorter for example can use combine SorterInstruction.FilterPrefabhashEquals, and a prefab hash shifted 8 bits, to write a single instruction to whitelist an item on the sorter. Instructions can pass arbitrary information to the sorter though. SorterInstruction.LimitNextExecutionByCount, can be used to modify the evaluation of a the next instruction, and will actually modify its own count payload, as it passes items through, allowing a player to read that instruction from the stack, and figure out what the sorter is doing even if it has a ton of custom instructions.
This approach to advanced device operation lets us as developers keep the operations of machines as very simplistic, and straight forward. As an example, instead of circuit boards containing tons of custom code that only we developers can see and modify, players could see an airlock circuit board having clear instructions on its stack, turning on and off vents, and conducting evaluation operations on sensors.
Insulation
We've added new insulated inline tanks for both gasses and liquids, and changed the pipe insulation upgrade process slightly. Last update we added the ability to upgrade pipes to insulated pipes using a wrench and some insulated pipes. Based on feedback from the community, combined with us adding these new inline insulated tanks, we've changed the upgrade process to use a new adhesive insulation item that you print separately.
Ore Tablet
Previously the ore tablet required the use of the Ground Penetrating Radar, and was very annoying to use. The GPR has been removed and the tablet now functions by itself. Just throw it in a tablet and you're good to go.
Future Content
If you've been following the beta patch notes, you'll be aware that we've been working on suits as well as more starting condition changes. None of these changes are active in the game yet so we've separated the changes in the bellow change logs.
Here's a quick outline of the upcoming changes.
Starting Conditions
This update includes some changes to the starting conditions data and paves the way for making much more dynamic starting conditions. When starting a new game you'll be provided with the familiar starting gear, however when another player joins, they will bring with them a smaller set of gear to reduce the stresses that each new player adds to a game. When respawning it will remain largely unchanged. All of these are defined in XML for easy modding.
Suits
A range of new suits are still in heavy development so we can't give too many details, but you should expect a range of suits that are suited for different situations rather than there being the "bad suit" and the "good suit". In the same vein we'll be reworking jetpacks with a set of jetpacks that are useful in different situations.
More Stack Instructions
The sorter was a obvious example of a complex machine that needed a better programmatic way of configuring. Manufacturing, and Trading both have multiple complex machines that we are looking at as examples of both simplifying the machines operations, and creating the opportunities for players to control core systems in their base without being overly complex(to stationeers standards). We also will be adding specific large memory servers, so players can store large and complex data structures of their own.
Patch Artwork
[expand type=details]
[/expand]
Your support makes these updates possible
https://store.steampowered.com/bundle/2624/Stationeers_Complete_the_Set/
Change Log v0.2.4936.22393
- Refactored the Starting and Respawn Condition definitions. This is a non-critical breaking change, which will affect mods. The old data structure was limited and had a lot problems. The new one uses the same classes and approach as the tradables system. The chosen spawn structures are defined primarily in the worldsetting, and if it is blank the game will use default ones. See the discord beta announcements for documentation about how to format xml for this.
- Fixed medium shelf not being deconstructable when built against a frame
- Fixed large tank throwing errors when using autorotate
- Removed inaccurate stationpedia descriptions for canisters
- Fixed cancel keybind closing the window even if the filter field was populated. A keypress will now clear the filter field before closing the window.
- Fixed close all button not showing correctly when getting out of a sleeper
- Fixed undocked inventory windows staying visible when you fall asleep in a sleeper
- Fixed Eggs laid by chickens could not be used in microwave or automated oven.
- Changed space maps to clamp traders towards the upper sky, until devices are possibly changed to be placed in any rotation on space maps.
- Fixed a bug where Stationpedia could be opened while rebinding keys
- Fixed a bug where using 'save as' would not give the new save a unique id. This would cause inventory window positions to mimic the parent save which can be confusing.
- Fixed a bug where inventory window positions would not be saved in the playercookie in some instances.
- Fixed a bug where closing Stationpedia while the ingame pause menu is open would unpause the game
- Exposed Math outputs of Convection and radiation calculations.
- Added SuitBase class.
- Changed Pipe Analyser Operating sound to be quieter and less high pitched.
- Added first pass on new suit prefabs.
- Added new prefabs for Insulated In-Line Tanks and Insulated Pipe Utilities (WIP waiting on new art assets)
- Fixed helmet overlay settings not being respected on load
- Added first pass of runtime game profiler tool
- Fixed a number of issues with the audio concurrency system that were preventing it from working as designed and in some cases not working at all.
- Fixed the runtime game profiler tool so it now displays the memory usage
- Added concurrency setting for pipeAnalysers.
- Fixed looping sounds that were disabled due to concurrency would not play at later point when they should.
- Refactored how tradable data is stored. This does impact slightly how references are handled with trading, so requires careful testing to ensure there are no problems.
- Added the ability to upgrade an inline tank to it's insulated variant
- Added new meshes for Insulated InLine tanks and their associated kits
- Added recipe for Insulated Pipe Utility to PipeBender
- Fixed bug where inventory windows were not being cleared correctly when exiting game or respawning.
- Fixed white indicator box around open inventory items not showing up
- Added further null checking to suit LeakEffects to stop an NRE that can occur in specific scenarios.
- Fixed the ordering of the display mode materials for the station batteries
- Adjusted Vulcan sun position to atmospheric temperature map to prevent winter on vulcan from diverging from desired gameplay temperatures. Instead of 650C summer days and 250C Winter days, summers days now max out around 750C, and Winter days bottom out around 500C. Temperatures rise faster in the mornings and fall in evenings, but there still is changing thermal flux throughout the entire day. Night time temperatures remain the same.
- Added error in console when attempting to load a spawn with an invalid ID
- Removed bad id test case from last commit
- Updated pipes and inline tanks to require Adhesive Insulation to upgrade to their insulated variants
- Added Adhesive Insulation item
- Fixed issue where liquid canister and water bottle would spawn without any contents in the lander
- Removed duplicate constructable from table kit
- Fixed a bug where Battery-powered Wall Lights would remain powered after their power cable was cut.
- Fixed tables not being able to be rotated by the player
- Fixed config cartridge value text overlapping when logic values are long
- Fixed text overflowing off the edge of the config cartridge
- Fixed possible nre when chickens food target is null when loading a game
- Fixed pickaxe playing sounds and particles when you are mining with another mining tool while holding it in your unselected hand.
- Fixed plants getting stuck as not visible when built outside of occlusion range.
- Fixed clothing slot hotkey hint area having the incorrect width when empty.
- Added Thing tooltip now updates each frame.
- Fixed a bug where pipes placed in walls or on the side of frames were invulnerable
- Fixed some tooltips showing up as empty.
- Added first pass of Logic Sorter that will be powered by a "Stack" that can be set using GET and PUT from IC. This "stack" contains a struct of doubles, with the first byte being the "instruction". So logic sorters will be given a series of instructions. They will go through the stack and process it's stack. This means that, going forward, devices like the sorter will act like CPUs and have their own instructions that IC can be used to manipulate. Currently just debugging. This will allow you to fill the "stack" for the sorter will increasingly complex and powerful instructions, such as "filter 8 ItemSteelSheets", where the stacker would filter off 8 steel sheets and then stop.
- Fixed the Reagent Processor recipes not properly linking their requirements in Stationpedia
- Fixed a bug where destroyed landing pad pieces would lose their material, becoming bright pink.
- Fixed a bug where evaluating atmospherics pressure damage would occasionally throw collection modified exceptions
- Moved some materials into their correct folder
- Removed the GPR
- Changed ore scanner tablet cartridges to work without the GPR and did a small refactor to get rid of coroutines and unused code.
- Added second pass to Logic Sorter. Now it contains five basic instructions that process the stack on the logic sorter. Currently the logic sorter stack is volatile between saves (not serialized) but it will be in future update. Each value of the stack, the first 8bits are the OPCODE and the next 32bits are the integer used. This is show by machine generated section on the stationpedia that shows the format required for each instruction. This is a very powerful system that can form the future of very advanced systems within all devices in the game.
- Fixed issue where players that split a stackable item into the world while looking downwards would take damage
- Added more information about internal stack to the Stationpedia. Now the access mode (READ | WRITE) and memory size (Bytes) will be shown as well as the any device instructions that will be assessed on the stack.
- Added third pass on LogicSorter. Now the mode affects how the LogicSorter processes the stack. By default, it is set to ALL so all instructions on the stack will need to evaluate to true before something is moved to the Export 2 slot. This means you could load an instruction for FilterPrefabHashEquals to filter for ItemCoalOre and FilterQuantityEquals 10, this would then only move a Coal Ore that had a stack size of 10 to the Export2 Slot.
- Fixed AdvancedSuit class (hardsuit) was not bound to IMemory interfaces despite implementing the required signature. This meant that the advanced suits were not considered for some of the more complex IC instructions such as GET/GETD and PUT/PUTD.
- Added FilterQuantityCompare to LogicSorter which the struct has the OpCode, ComparisonOperator, and Quantity. The ComparisonOperator uses the compare constant (equals is 0, greater is 1, etc...).
- Cleanup of LogicStack helper statics to make it much easier for other devices to implement and process their internal stack.
- Fixed cant use constants in DEFINE instruction on IC. Now you can do 'DEFINE operator Equals' and it will use the inbuilt 'Equals' constant. Previously it would throw an error, as DEFINE was very strict about requiring a literal double. Now it will parse a double for an actual number or a constant.
- Changed stationpedia formatting of Logic Stack Instructions to make the struct clearer.
- Added Serialization to LogicStack. This is generically checked at the Thing level, meaning it will automatically be serialized/deserialzed for any item or device or anything that implements a logic stack. When your game saves, the state will be saved, and then loaded next time.
- Fixed issue of players getting damaged by splitting stacks while looking downwards
- Added FilterSlotTypeCompare instruction to LogicSorter. This allows you to assess contents and filter based on the SlotType of the thing.
- Added LimitNextExecutionByCount instruction to LogicSorter. This includes a USHORT (16) in its payload, and it will ensure the next executable instruction will only return true the number of specified times. Each time it returns true, it will update its count decremented by one.
- Added CLR instruction. This instruction will clear the Stack memory for the provided device. This will work for any device that has a writable internal memory, such as the Logic Sorter, Circuit Housing. It will not work for devices that have read only memory.
- Added IO indicator to CircuitHousing. It will flash green when stack is read and yellow when stack is written to.
- Added Internal Memory to the RocketCelestialTracker that will have an internal memory of Horizontal and Vertical coordinates for celestial objects, providing faster access to all data if needed.
- SatelliteDish now uses logic type idle to return 0 if its still rotating, and 1 if its not.
- BestContactFilter is serialized on save.
- Changed the SignalID logic on the dish to return -1 instead of 0 when not finding a contact.
- BestContactFilter must be cleared back to -1 for the dish to auto select signals again.
- Added new logic type, BestContactFilter, to SatelliteDish that allows logically located trader IDs to be selected as the best signal, instead of forcing the closest contact to automatically be selected. This will allow player scripts to more easily search for a single target that has been previously identified.
- Fixed ItemBiomass Blueprint being the wrong size when using precision placement
- Changed the PortableComposter buttons to the prefab buttons
- Fixed the PortableComposter button colliders being the wrong size
- Tweaked small hangar door close animation as it was starting at the incorrect position.
Future Content
- Added ic code from advanced suit to the new SuitBase
- Added ability for new suits to pass brute damage through to entity as stun damage
- Created ISuit interface in preparation for adding new suit functionality and make Suit and SuitBase implement it.
- First pass on extracting internal air conditioner into an interface for new suit logic
- Temporarily disabled thermal interaction of helmets until new suits are balanced.
- Added placeholder convection values for new suits.
- Added Suit Heat/Cold Convection behaviour for new suit prefabs.
- Removed internal conditioner monobehaviour on new suits and replaced with static suit helper functions.
- Second pass on pulling out suit atmospherics functionality into statics.
- Added MovementSpeed Modifier to new suits. (spaceSuit = 125%, HardSuit and InsulatedSuit 80%, others are unchanged)
- Added Movement speed modifier to stationpedia suit info panel.
- Added new suit thermal values to stationpedia.
- Added new Suit info panel to stationpedia for showing values relevant to the new WIP suits.
- Moved default evaluate suit atmospherics code from normal suit into the SuitBase class.
- Added first pass of liquid cooling for new suits. All suits can take non-cryogenic liquids, some advanced suits can take cryogenic, and some can be upgraded using an AC upgrade to take cryogenics. A status warning is provided if the current liquid tank is not suitable, or if it's missing. (these changes are not currently accessible and are for internal testing.)
- Added Placeholder durability and Hygiene values to new suits.
- Changed Increased volume of new suits to 100L from 10L
- Reduced power of base suit AC from 2000J to 350J
- Added Enlarged coolant range for AdvancedACSuit.
- Changed suits now have an operating range for coolants.These values have been added to stationpedia. if the suit coolant is out of range the suit AC will be much less efficient and do less cooling for more power consumption.
- Fixed null ref when new suits have no coolant tank.
- First pass on adding new HARM suit.
- Added a 'back' slot to one of the new suits for testing purposes.
- First pass on adding 'back' slot to new suits. The back slot will be mirrored by a new slot display which will show up in the main inventory panel when a new suit is equipped.
- Update new suit's back slot to have the correct name.
- Made jetpacks and backpacks on new suits be visible on player.
- Fixed jetpacks in new suits not being picked up by the movement controller.
- When equipping one of the new suits, anything in the backpack slot will be ejected in-front of the player.
- Stopped the 'hold slot key' function from moving backpacks and jetpacks into the back slot if you are wearing one of the new suits.