You asked for it, and after a week of testing and reworking on the Beta branch we're ready to introduce Programmable Chips to the stable branch! In addition, we've almost completed work on the public bug tracker!.
Programmable Circuits
Last week we announced the addition of Programmable Circuits to the Beta Branch. Now after a week of improvements, adjustments and bug fixes we're ready to let everyone get their hands on this powerful tool.
You'll require 3 things. Firstly, an 'Integrated Circuit (IC10)' that will store your instruction set. These can be inserted into a Circuit Housing (built from the 'Kit (IC Housing)' that can be used to specify up to 6 devices you wish to read from/write to within the IC's instruction set. Finally, a Computer with a Motherboard (IC Editor) inserted can be used to import/export instructions from/to any IC Housing on the same network, and to edit instructions via a simple popup IDE window.
Basic help is available in-game via the Computer with an IC Editor Motherboard inserted.
The (up to) 6 devices you wish to work with in code can be specified using the 6 screws on the IC housing, then referenced in code using the syntax below:
In the following
db is the device itself (base unit)
d is a device
l is a logic type
q, r, s are registers or numbers
t is a register
# MIPS derived
l t d l # loads logic type l on device d to register t
ls t d s l # loads logic type l of register s on device d to register t
s d l r # stores the value in register r to logic type l on device d
move t r # t = r
add t r s # t = r + s
sub t r s # t = r - s
slt t r s # t = r < s ? 1 : 0
and t r s # t = 1 if both r and s non-zero, 0 otherwise
or t r s # t = 1 if at least one of r and s non-zero, 0 otherwise
xor t r s # t = 1 if exactly one of r and s are non-zero, 0 otherwise
nor t r s # t = 1 if both r and s are zero, 0 otherwise
mul t r s # t = r * s
div t r s # t = r / s
mod t r s # t = r mod s (not equivalent to % operator)
j q # jump to line q
bltz r q # branch to line q if r < 0
bgez r q # branch to line q if r >= 0
blez r q # branch to line q if r <= 0
bgtz r q # branch to line q if r > 0
beq r s q # branch to line q if r == s
bne r s q # branch to line q if r != s
jr q # relative jump to line q
brltz r q # relative branch to line q if r < 0
brgez r q # relative branch to line q if r >= 0
brlez r q # relative branch to line q if r <= 0
brgtz r q # relative branch to line q if r > 0
breq r s q # relative branch to line q if r == s
brne r s q # relative branch to line q if r != s
// MIPS II derived
sqrt t r # t = sqrt(r)
round t r # t = round(r)
trunc t r # t = trunc(r)
ceil t r # t = ceil(r)
floor t r # t = floor(r)
// stationeers useful stuff
label d str # displays string on device screw
max t r s # t = max(r,s)
min t r s # t = min(r,s)
abs t r # t = abs(s)
log t r # t = log(r)
exp t r # t = log(r)
rand t # t selected UAR from [0,1)
yield, # waits for next tick before continuing
alias n r # labels register r with name n
Supports indirect register addressing by adding r to the front. For example
rr0 is the register found by taking the value of r0 and using that as the
the number, and rrr0 is the value c in a = r0, b = ra, and c = rb. This
also works with devices. So if r0 stores 1 and r1 stores 2 then drr0
expands to d2.
Example 1: Climate Control
Device Settings on Housing:
d0 : Gas Sensor
d1 : Memory (Input for Batch Writer - Heaters.On)
d2 : Memory (Input for Batch Writer - ActiveVents.On)
d3 : Memory (Input for Batch Writer - ActiveVents.Mode)
d4 : Memory (Input for Batch Writer - WallCoolers.On)
d5 : Logic Dial (Target Temperature)
# set the screws to these strings for easy setup
label d0 GasSensor
label d1 MemoryHeaters
label d2 MemoryVentsOn
label d3 MemoryVentsMode
label d4 MemoryCoolers
label d5 DialTargetTemp
# set aliases to registers for easy ref
alias pressure r0
alias temperature r1
alias pressureCheck r2
alias dialSetting r3
alias temperatureCheck r4
# load settings to pressure
l pressure d0 Pressure
l temperature d0 Temperature
l dialSetting d5 Setting
# pressure checks
sub pressureCheck pressure 95
brgez pressureCheck 4
s d2 Setting 1
s d3 Setting 0
jr 7
sub pressureCheck pressure 105
brgez pressureCheck 3
s d2 Setting 1
jr 3
s d2 Setting 1
s d3 Setting 1
# temperature checks
sub temperatureCheck dialSetting 272.5
brgez temperatureCheck 3
s d1 Setting 1
jr 7
sub temperatureCheck dialSetting 274.5
brgez temperatureCheck 4
s d1 Setting 0
s d4 Setting 0
jr 2
s d4 Setting 1
yield
j 5
Example 2: Indirect Register Addressing
Device Settings on Housing: Lights 0-5 from left to right.
move r0 0
s dr0 On 1 # start with the left light on
yield
add r0 r0 1 # step to the right
s dr0 On 1 # turn next light on
yield
beq r0 5 8 # if at end of row jump to moving left
j 3 # otherwise keep going right
s dr0 On 0 # turn the current light off
sub r0 r0 1 # move to the left
yield
beq r0 0 3 # if at the first light jump back to moving right
j 8 # otherwise keep moving left
A useful webpage for testing out your programs is the illustrious Melair's IC Tool. This can be used to try out the instruction set outside of the game, and even share your creations with others.
If you have any questions or want to show off your creations, drop into the #logic-circuit-discussions channel on Stationeers Discord.
Public Bug Tracker Beta
Introducing the Stationeers Public Bug Tracker! We'll be looking into how best to use this over the coming weeks as part of an ongoing plan to improve the ability to collate bug reports and useful information from the community, as well as how certain bugs are prioritized and why.
Low-Poly Terrain Visualizer
To try and help fill the gap between the generated terrain and the sky, we're now generating a much wider area but using a very basic version of the terrain. This will let you scout out for large mountains or recognizable terrain features without the loading/unloading required for normal mineable, collideable terrain. Currently only supported on Mars, we'll look at rolling it out to the other environments in the near future.
Version 0.1.1648.7714
- Added Programmable Chips - see patch notes for further details!
- Added Low-poly terrain visualizer for rendering a rough version of terrain with a much larger view distance than the actual terrain. Can be enabled via the Video Options screen as 'Extended Terrain'.
- Fixed issue where graph display circuitboard creates giant white bars in space if removed from the console.
- Fixed saved Ambient Occlusion and Lens Flares settings not being correctly applied on launch. [Thanks ChronoMantis]
- Improved: Reduce sound level for active vent intake and outtake sound, as well as switch on/offs. Enjoy a more comfortable sonic environment!
- Fixed inability to mine after changing hand or unequipping a mining drill while it was operating until you relaunched the game.
- Fixed Duplicate entries on settings screen for voice notifications and key bindings.
- Fixed issue with GasDisplay circuit boards occasionally displaying the incorrect unit of pressure. [Thanks Risu!]
- Updated translations for French, Italian, Russian, Spanish and Suomi.