Stationeers

Integrated Circuitry

Our IC system somewhat loosely models MIPS "instructions". So its like a small virtual processor and you define instructions that you want to run. This update includes some new instructions, a breaking change to one set of instructions, and some feature improvements to the IC editing system. In addition or as part of these updates number bugfixes and optimizations have been added to the IC system itself as well as the editor. [h2]Predictive Instruction Help in IC Editor[/h2] If what you have typed matches an instruction, the editor will include helpful information in the background to assist you in formatting the instruction correctly. [img]{STEAM_CLAN_IMAGE}/28304711/ee7938f260f02e3b4f628d902074f9b3c7296f81.gif[/img] [h2]Variable and Constant changes[/h2] [h3]New IC Constants[/h3] A variety of new constants can now be added to your code. These will resolve as numbers, but can remain in your script for ease of use. Think of these as "special" numbers the processor has that you can always address without having the define them on a register. This should reduce the number of instructions you need in code. [list] [*]nan; A constant representing 'not a number'. This constant technically provides a 'quiet' NaN, a signal NaN from some instructions will result in an exception and halt execution [*]pinf; A constant representing a positive infinite value [*]ninf; A constant representing a negative infinite value [*]pi; A constant representing ratio of the circumference of a circle to its diameter, provided in double precision [*]deg2rad; Degrees to radians conversion constant [*]rad2deg; Radians to degrees conversion constant [*]epsilon; A constant representing the smallest value representable in double precision [/list] [h3]Improved Naming of resolving types[/h3] In addition to the above how you reference slots and gas types by constant has changed. These are detailed in the "Variables" help. You can reference a gas "type" using "GasType.Oxygen" or similar. All available mode types that can be used in scripts are now listed in the Functions help in the IC editor. You may need to change your scripts for this. [h2]Network Read/Write[/h2] The ability to reference devices [i]networks[/i] via a special syntax. This allows cable networks to be the store of temporary data (Channel0 to Channel7), and IC's to be able to reference a devices network connection, and then load/set data on that connections network. [quote][h3]This is potentially very powerful, with the primary use case of this is where you want to share data between multiple networks. An IC will be able to read/write to any cable network connected to any device referenced on it.[/h3][/quote] [h3]Network Referencing Examples[/h3] If we take a normal load instruction: [code]l r0 d0 Setting[/code] This will load "Setting" off device 0 into register 0 Now we read something of that devices network connections: [code]l r0 d0:0 Channel0[/code] This will load "Channel0" off device 0's connection "0". If you check stationpedia, you can see a list of connections a device has. Every "opening" of all types is a connection, so pipes, cables, chutes - they all count as a connection. In my example above, this IC is polling for data on that channel. However, there might be no data here, so we created some "NaN" handling instructions to detect and manage this. There are NaN based branch and select instructions. To save to a cable network, you can reference in the same way: [code]s d0:0 Channel0 r0[/code] That will write to Channel 0, on device 0's first connection. [h3]Cable Network Volatility[/h3] Cable networks are volatile. If you look at their ID's, you can see they change almost every time you make a cable change. This is because cable networks are just a construct to hold a concept of a "group of cables". Therefore, they should not be considered a good store of information. Each time they make a destructive change, their data will be gone. If you ask them for this information, it will not exist. You will receive a "not a number" value (technically, on the IC, its a special kind of NaN called a QNaN, as a SNaN will generate an exception on the IC). [h2]New and changed IC Instructions[/h2] [h3]Load Reagent Instruction Syntax Change[/h3] [quote][h3]This is a BREAKING change. Old instruction syntax will no longer work. This is regretable, but it was the only way to fix the bug associated with the values being localized for clients and not working on servers.[/h3][/quote] [img]{STEAM_CLAN_IMAGE}/28304711/6c7500fba9d42090584a7c46ebeca6dee792bf5e.png[/img] [h3]Referencing Hashes using Preprocessors[/h3] Hashing is a process of converting the value from a string (meaning text) space to integer (meaning numbers) space or an index value or a string, that has a length of fixed size. Previously with IC chips this meant that you had to look up a devices "PrefabHash" when you wanted to check device types. This was difficult, confusing, and not easy to read. This HASH preprocesssor can also be used with the [b]sbn[/b] and [b]lbn[/b] instructions to reference only specific devices named something. These additions might take a bit of getting used to but they are performant and quite powerful. Now you can use a "Preprocessor Macro" command, HASH(..), to keep the text in your script but have it "Hashed" before being run by the processor. This means you can keep the text of the prefab type in your script, but still have it run correctly in instructions. In this example, we move into register 0, the hash for Coal Ore. You can find the prefab name of any object using the Stationpedia (F1) in game: [code]move r0 HASH("ItemCoalOre")[/code] [h3]Load batch Named[/h3] Instruction allows more precise control over which devices are affected by the load instruction based on their name hash. [code]lbn [/code] [h3]Store batch Named[/h3] Instruction allows more precise control over which devices are affected by the store instruction based on their name hash. [code]sbn [/code] [h3]Load Batch Slot[/h3] Instruction enables batch operations involving slots, streamlining the process of working with multiple devices. [code]lbs [/code] [h3]Select NaN (Not a Number)[/h3] Instruction provides a way to check for NaN values in IC operations. [code]snan [/code] [h3]Select NaN Inverse[/h3] Instruction is the inverse of the snan instruction, selecting non-NaN values. [code]snanz [/code] [h3]Branch NaN[/h3] Instruction allows for branching operations based on whether a value is NaN or not. [code]bnan [/code] [h3]Relative Branch NaN[/h3] Instruction is similar to the bnan instruction, but it branches relative to the current line number. [code]brnan [/code] These new instructions expand the capabilities of the IC system and provide greater flexibility and control for players when working with Integrated Circuits. [h2]Improved Search Features[/h2] The function help menu now has a search to be able to quickly find the instructions you're looking for. [img]{STEAM_CLAN_IMAGE}/28304711/48f568aa98e95f04e4404be8a826201f20c9326f.gif[/img] [h1]Trader Improvements[/h1] [h3]Trader Navigation and Collision Fixes[/h3] We've addressed issues with traders colliding with objects and not being correctly centered on the landing pad when loading the world. These fixes ensure a smoother experience for players interacting with traders and provide more accurate positioning for shuttles on the pad. [h3]Economy Changes[/h3] We've made several adjustments to the trader volumes, prices, and item availability to improve the balance and encourage player interaction with the trade system. These changes aim to enhance the in-game economy and provide a more engaging experience for players trading resources and items. [h1]Performance Improvements[/h1] We're gradually making optimizations to devices that share like components, this time it's devices that have the animated import/export slots. This will help increase performance where there are a lot of these devices present. We've done this for a number of things, such as on/off switches, and we'll continue to work through them. [h1]Localization Improvements[/h1] We've added new German translations and fixed some issues with slot names in non-English languages to provide a more consistent experience for all players. We're also working on adding more language support in the near future. To make this process smoother and more efficient, we're developing a new pipeline to allow the community to contribute to translations in an easy and organized way. This will ensure that updates and improvements to the game's localization can be integrated quickly and accurately, providing a better experience for players around the world. [h1]Your support makes this possible[/h1] 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! [quote][h3]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.[/h3][/quote] 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/ [h3]Changelog v [/h3] [list] [*]Fixed Inventory events were incorrect for some items. This could have caused inconsistent results for some inventory reliant functions. This bug will have existed for quite some time, so there is a chance this causes issues being fixed. Maybe however help with some obscure inventory related bugs. [*]Added extra non-shadow casting light effects to jetpack. [*]Fixed belts and other items causing weird shadow artifacts while a portable light was in the inventory. [*]Removed animators from Sound Cartridges, Research capsules and MKII toolbelt. [*]Replaced Animator on GasMixer with new anim components. [*]Changed OmniPowerTransmitter to use new animatorComponents. [*]Removed Animators from cooked food (added in error): CookedCondensedMilk, CookedCorn, CookedMushroom, CookedPowderedEggs, CookedPumpkin, CookedRice, CookedSoybean, CookedTomato. [*]Removed Animators added in error to some canned food. [*]Removed Animators from dynamic liquid tanks. [*]Deleted DynamicLightNetworkTest debug prefab. [*]Removed Animators from mining backpacks that were added in error. [*]Changed dynamicCrates to use new animation components. [*]Refactored script help search. Now correctly uses type hashes so that text can be matched in search. Also change formatting for colors in search to improve readability. [*]Added automation for setting up activate button prefab. [*]Removed animators from access cards. [*]Removed animators from music machines and replaced with animator components. [*]Removed Debug error print when pooled audio sources destroyed in editor. [*]Fixed TraderShuttles permanently removing AudioSources from the audio pool. [*]Changed Increased size of audio pool and audio collision pool. [*]Added IAudioParent Interface. [*]Refactored audio pool to use IAudioParent for sound positioning. [*]Added Transform Property to thing and removed it from child classes. [*]Changed StopAllAudio function on Thing returns any parented pooledAudioSources to the pool. [*]Implemented IAudioParent interface on trader shuttle. [*]Changed Trader shuttle sounds now send less signal to the reverb channel. [*]Fixed script help for variables was not sorted. [*]Changed Slot variable references for scripts begin with SlotType to be consistent with GasType. [*]Fixed a number of pipe devices not animating their lights correctly: PressureRegulator, BackPressureRegulator, PressureRegulatorLiquid, BackPressureRegulatorLiquid, LiquidVolumePump, Digital valve, LiquidDigitalValve, PipeAnalyser [*]Fixed Animations broken on some devices. [*]Added improved search handling to the variables page for script help. [*]Added enum references to variables page in script help. Now all constants, variables, and enum types that can be used are shown in the variables page. Entering the name directly, or its category directly (eg. "LogicType" or "LogicSlotType") will bring up the item or the category, respectively. [*]Increased number of Virtual and Real voices in the scene, helping to fix audio issues in large bases. This may mean for large bases there could be some performance impact. If so, optimization will follow. Currently the audio was being silently ignored. [*]Removed many coroutines across the project that were generating memory garbage. [*]Refactored GameAudioSource to remove all Coroutines and replaced with UniTasks. This reduces the memory garbage generated with fading and playing audio effects. This is a pretty significant change so any sound exceptions please report. Additional code pass to cleanup and making the process of fading audio cleaner and simpler. [*]Fixed some game sounds stop playing after playing for a while. Pooled audio sources were not being protected from deletion. This means if an object was playing sounds while it was destroyed it would delete the audio source, and it was no longer available in the pool. Eventually when this pool was empty, no more sounds could be played for that pool type. Took the pooling system from Art of the Rail and applied it to Stationeers. This is an efficient and protected generic system that we can use for pooling any objects in the game, not just audio. [*]Changed chute outlet to use new animation component. [*]Fixed some items using animation component not having their state synced when first built. [*]Fixed portable lights and road flares would cast weird shadows when on a local player. Now when on a local player, their local player shadows will be turned off. This means that they will still cast shadows, but not on the first person player (and their helmet) themselves. [*]Changed SBD Silo to use new animation component system. [*]Moved stationpedia page and other classes out of stationpedia [*]Changed ChuteBin to use new AnimComponents. [*]Fixed volume text not showing on stationpedia [*]Changed Sorter to use new animation components. [*]Fixed config cartridge showing wrong logic types [*]Swapped out unity animator of custom components on unloader. [*]Fixed HASH(..) IC preprocessor was occurring on the IC, not before being handed to the IC. This was causing inconsistent results when spaces were in the hash, as the IC has no ability to understand a space is not part of syntax. There were multiple other bad things about the previous implementation. Now the HASH(..) is executed before being handed to the IC, meaning as far as the IC concerned it just receives an integer. This is consistent with the IC architecture, as well as avoiding a serious of other bugs and issues. [*]Added `lbn` IC instruction, `load batch named`. This instruction runs the same as the `lb` load batch command, with the additional step of testing against a hash of the name of the devices. The load instruction will only be applied to devices that have a name hash that equals the one provided. [*]Added `sbn` IC instruction, `store batch named`. This instruction runs the same as the `sb` store batch command, with the additional step of testing against a hash of the name of the devices. The store instruction will only be applied to devices that have a name hash that equals the one provided. [*]Fixed HASH(..) failed to mask where the encapsulated string contained spaces. Now an entire string up until a quotation mark will be hashed. You cannot hash a quotation mark, even if it is escaped. Doing so will at best halt execution. [*]Added IC instruction 'lbs' which load slot variables as a batch. This means you can pass in a device hash, a slot index, and the variable, and depending on the batch mode, you can conduct a math operation and get a value of a batch of things. [*]Cleaned up how instructions are displayed in the Script Help. Now there is a standardized system for displaying the instruction parameters with better information to make it clearer what you need to input. [*]Added depreciated instructions and variables are displayed in the editor. Now they are shown with 'strikethrough' to indicated they are depreciated and should not be used. They are also not shown in the help files. [*]Added ChuteImport Export bin prefabs. [*]Added Lever Animation component [*]Removed unity animator from stacker and replaced with animator components. [*]Added Automation for setting up animator components [*]Updated thumbnails for high volume has canister and extra large wireless battery [*]Added Abstract class InteractableAnimComponent.cs [*]Refactored ExportAnimationComponent to use InteractableAnimComponent class. [*]Added ImportAnimationComponent. [*]Added ImportBin and ImportBinHazardStripes prefabs. [*]Changed Solid fuel Generator to use new import component and removed unity animator. [*]Fixed Error spam when trying to merge insulated pipe with normal pipe. [*]Added Type Name and Type Hash to Reagent entries in stationpedia. Click on their values to automatically copy them to clipboard. [*]Removed Reagent Referencing in IC instruction 'lr' using localized string for lookup. This is a BREAKING change. If you previously wanted to reference a reagent in IC as part of the 'lr' instruction, you had to enter the localized word for that reagent in your language. However, this would break in multiplayer if the players were running different languages, or if the localized text changed even slightly at a later date. See addition in changelog below for how to use the new syntax that replaces this. [*]Added hashed value for 'lr' command. Now to reference a reagent in the 'lr' command you must pass in a register. This brings the instruction in line with others. The syntax is now 'lr '. You can generate the hash using the new HASH(..) preprocessor, such as 'HASH("Iron")' or lookup the hash on the Stationpedia. [*]Added special tradeable items (first pass) [*]infinite filter, extra large gas canister and extra large wireless battery. [*]Fixed Error spam when trying to place a structure somewhere that was blocked by an existing frame. [*]Fixed Could place walls and floor pieces on the internal faces of the Stairwell piece, it was designed to only allow placement of wall pieces on exterior faces (like a frame). [*]Fixed Comms motherboard contact resolve bars behave incorrectly when dish is rotating. [*]Adding comments to help in the creation of world log event types [*]Made world log sync to clients [*]Cleaned SmallGrid Connection Validation function and removed debugging logs. [*]Added LineNumber Logic Variable. Allows the logic system to query the current line number of a integrated circuit executing on a circuit housing. Useful to query the current state of an executing system. You can also write this value using the logic system, but use with caution as change of this value is not expected by the processor architecture, and it will attempt to honor the changes you make and may cause unexpected results. The processor housing will make best efforts to clamp your values to acceptable ranges but you may be able to halt execution when doing this incorrectly. [*]Added `snan` instruction for select 1 to register when provided value is 'not a number', 0 when false. [*]Added `snanz` instruction for select 0 to register when provided value is 'not a number', 1 when false. [*]Added connections section to Stationpedia pages. This will list all connection information for any device that supports connections. This means any chute, pipe, or cable openings on the device. This include includes a number that is the connection "index", which is used for referencing that connection with the new device network syntax on Integrated Circuits. [*]Added a preprocessor macro to IC processor to allow the generation of hashes at compile time. Using this you can automatically generate PrefabHashes using human readable text, that will be compiled into a hash before execution. To use this, surround the prefab name in the words, and in quote marks for example: HASH("PrefabNameHere"). Note that the HASH and the contents of the string are case sensitive. Using a different case inside the string will generate a different hash. [*]Refactored MIPS processor constants. Now have 'nan', 'pinf', 'ninf', 'pi', 'deg2rad', 'rad2deg', and 'epsilon'. These can be used anywhere you can use a number. [*]Added processor constants to be included in script help function area. Autogenerating their descriptions and values, and searchable. [*]Remove old prefab file for GasTankAir that had been unused for many years and was causing errors. [*]Fixed Slots not having the correct name in non English languages [*]Added new German Translations [*]Added Structures and devices now show helpful error tooltips when they can't be built. Previously the tooltip system would fall back to the "requires support" message which was often incorrect and misleading. [*]Added Second pass of the Device Network Referencing for MIPS instructions. Now correctly able to load and store from the 'Channel0' to 'Channel7' variables. 'Setting' variable is no longer supported as it was from first pass. [*]Added entering a command or variable name exactly as it is spelled and pressing enter on script reference screens will now bring up that entry. So entering 'l' and pressing enter, will show the 'l' instruction. [*]Added 'bnan' MIPS instruction that branches when provided value is 'not a number'. [*]Added 'brnan' MIPS instruction that relative branches when provided value is 'not a number'. [*]Added log panel to comms motherboard [*]Missing file from prior commit [*]Added Export Animation component. Removes need for unity animator on new devices with export slot. [*]Added ExportGate prefab. [*]Changed Deep Miner swapped out unity animator Export handling with new component as test case for new system. [*]Refactored help for Slot Variables, Variables, and Functions within the IC Editor. Now uses a threaded text search system and updated the UI to match the stationpedia UI. Uses the same search options as stationpedia (separate blocks to search using comma, etc...). [*]Added First pass of Device Connection Referencing for Integrated Circuits. Currently load and set support use of : where conn is the connection index for the device. This then attempts to set or load on that network. Cable Networks now implement ILogicable, meaning they can have data stored or read from them. They are, however, volatile. They should not be considered to exist always and should be used for data transmission rather than a reliable data store. By default their data will be NaN. Future functionality will make it easier to check NaN inside IC code. [*]Optimized Device connection registration to cache their connection data for cheaper checking for open ends. May provide minor performance improvements when editing very large cable, pipe, or chute networks, [*]Fixed Text parsing bugs with IC editor related to device and register referencing. Additional optimizations for text parsing IC scripts were also applied, but unlikely to be significant enough to notice in the brief time parsing occurs. [*]Added logging system to keep track of trader events [*]Decreased T1 traders to have 75% volume, down from 100%, on bulk tradables [*]Increased T3 Traders to have 150% volume, up from 120%, on bulk tradables [*]Fixed ship fuel purchase text not mentioning that it is x100 mole. [*]Increased Chance a ship wishes to buy fuel to 1/2, from 1/5 [*]Increased volatile ice sale price from .5 to .75 on the ore trader [*]Decreased oxite, and volatile ice trader volume by 75% on the ore trader [*]Decreased volatile gas sale price from 10 to 7.5, and increased trader volume from 1000 mole to 2000 mole from the gas trader. [*]Decreased volatile ice buy price from the gas trader from 1 to .8. [*]Decreased all max ice purchase volumes from 1000 to 600 on the gas trader. [*]Fixed shuttle position not being correctly centered on the pad when loading world if the pad is evenly sized [*]Tweaked large shuttle size and collider size so they no longer collide with walls in a 6x6 hangar [*]Fixed logic transmitters getting added to the transmitters list twice making cycling though active transmitters get stuck [*]Fixed logic transmitters list not being cleared between loading worlds [*]Fixed bug where trader contacts would get stuck on the comms terminal after departing mid approach or being destroyed [*]Fixed gas trader will buy used filters [*]Fixed missing thumbnail on 'ship fuel' trade item [*]Added missing fertiliser slot name to localisation [*]Made hydroponics tray and tray device fertiliser slots use the same scaling [*]Fixed a few null ref exceptions that could occur with comms motherboard when disconnecting landing pad [*]Fixed bug where item counts in vending machines could be higher than expected if more than one device is connected to the landing pad. [/list]