v0.1.33 (Early Access)
Ageing hardware stops taking memory, cores and disk space off your servers. Wear now costs disk speed and electricity, and nothing else. Powering on a new server no longer drags every control plane onto it, and running a cable from a fast port down to a slower one keeps the kind of cable you picked. Multiplayer gets a way to join a friend from inside the game, and stops leaving players standing in your building after they have gone.
Added
Joining a multiplayer session
- There is a Join a Friend button on the title screen. The game could host a session and offered no way at all to join one. Every join had to be started from Steam itself, from a friend's right-click menu or an invite, so a player who did not know that reasonably concluded only the host could open a session. The title screen now lists the friends who are playing, says which of them are in a session you can join, and drops you into the one you pick. Friends playing on their own are listed too, greyed, so you can tell "nobody is playing" apart from "nobody has started a session yet".
- Accepting an invite while you are already playing now asks you, and then takes you there. Clicking Join Game on a friend while you were mid-run did nothing whatsoever if they were still setting up their session, and put a note in your comms feed telling you to go and quit to the title yourself if their world was already running. Either way you had to leave the game and come back in by hand. You now get asked whether to leave and join, and if you say yes your run is autosaved and closed for you and you land in their session. Saying no leaves you exactly where you were.
Changed
Ageing hardware
- An ageing server no longer loses memory, cores or disk space. Wear used to shrink all four of a machine's resources at once. A well used server could be down to 60% of the memory, cores, storage and disk speed it was sold with, and it got there in about four hours of play at normal speed. A rack you had packed to a comfortable 90% would quietly tip into being oversubscribed with you having done nothing at all, and the customers on it started suffering for it. Wear now costs disk speed only, and it bottoms out at 10% down rather than 40%. The memory, cores and storage you paid for stay yours for the life of the machine, and nothing is ever taken back from work that is already running.
- Old hardware still costs you, on the power bill. The other half of ageing is unchanged: a worn machine draws up to a quarter more watts for the same work. That bites hardest where power is dearest, so it is a mild drag in the garage or the basement and a real one once you are paying a colocation's rate. It is a slow squeeze on your margin rather than a sudden loss of capacity, and it is the figure to watch when you are deciding whether a machine still earns its rack space.
- A machine's disk speed reading shows what its disks can actually do. The console showed the number printed on the box. It now shows the real figure after wear, so a slowing disk is visible, instead of reading comfortable while new storage was quietly turned away against a lower limit. The condition line names storage rather than talking about capacity in general, and the processor rows no longer apply a wear discount that no longer exists.
Running a multiplayer session
- Quitting to the title as the host now asks first. Leaving ends the session for everyone in it: their world freezes, and after about a quarter of a minute of failed reconnects they are put back on their own title screen. Nothing said so, and it was two clicks from anywhere. The host now has to press it twice, and the second press says what it will do. Players who joined still leave in one press, because they are only leaving themselves.
- Joined players are told the host saves the world, rather than finding the Save button gone. The button was hidden for anyone who joined, which answered no question and moved every button under it. It is now visible, disabled, and says who does the saving.
- The multiplayer settings are reachable if you are in a session. Accent colour, topper and screen glyph sat behind the same test-build gate as the rest of multiplayer. A player who arrived by accepting a Steam invite therefore had a session, a character and a colour, and nowhere to change any of it. The tab now appears whenever you are actually in a shared world.
- A multiplayer save that comes back up single-player says so. Loading one without Steam running, or on a build where multiplayer is not switched on, quietly resumes it solo. The world loads correctly, it just is not joinable, and nothing told you: you carried on believing you were hosting and could not work out why nobody could get in. It now says so when the world loads.
Fixed
Services
- Powering on a new server no longer drags every control plane onto it. If your hosts all have a role or a tier assigned, the one box you just racked was the only unassigned machine in the building, and that was enough to make it the preferred home for every control plane you run. It had no cable in it yet, so CDN, Kubernetes and the rest all went unreachable at once and stopped scheduling anything until you wired it. A host now has to be reachable before it can take a control plane at all. If the only iron left is reserved for a tenant, a working plane on that beats a dead one on the new box, and it will move across once you cable it.
Cabling
- Running an AOC from a faster port to a slower one keeps giving you an AOC. Starting at a QSFP port and terminating on SFP handed back a DAC. The list you pick from is built off whichever port you click first, the final list is built off the slower of the two, so a 100G AOC was not on the final list and the game quietly dropped to the cheapest thing there, which is always DAC. It now stays in the family you picked and just comes down a generation, so a 100G AOC becomes a 25G AOC. Starting at the slow end was always fine and still is, the two directions now agree. Same for fibre: an OM4 pick lands on the pair's OM5 rung instead of falling to copper.
- Fibre between an SFP port and a QSFP port draws both of its strands again. An LC duplex lead is a pair of strands, and it was being drawn as one plain tube whenever either end of the run sat in a QSFP port. That flattened the SFP end too, which really does have two ferrules in it, so a fibre lead sat there looking like an AOC. Both ends now show what is actually in them: the pair runs as a pair and merges into a single boot at the QSFP end, the way it already does going into a fibre patch panel. A run between two QSFP ports is a single ribbon and still draws as one tube.
Multiplayer
- A player who drops out no longer stands in your building for the rest of the session. Someone who quit tidily did disappear. Someone whose game crashed, or whose connection died without closing properly, did not: the session kept believing they were still there. Their character stood frozen where it last was, their name stayed on the roster with a ping beside it, and anything they were carrying stayed claimed by them, so nobody else could pick it up. The session now notices a player who has gone quiet and removes them, and their character is also checked against the list of who is genuinely connected, so it goes even if the first check misses it.
- A player who leaves mid-cable no longer leaves the cable hanging. The half-finished run they were dragging was drawn separately from their character, so removing them left the cable floating in the room until the session ended.
- The connection panel and the ping readout fill in properly. Both were blank for the first few seconds after joining, and the panel in the pause menu then showed whatever had been true at the instant you opened it and never updated while you looked at it. Opening it too early meant the whole section was missing, and it stayed missing for as long as the menu was open, which read as the feature not existing. The panel now updates while it is open, and both it and the roster card say they are connecting rather than showing nothing at all.
- A refused join tells you why it was refused. Every reason came out as "couldn't start the simulation engine", which names the wrong thing entirely and gives you nothing to do about it. You are now told when you and the host are on different versions, when the session is full, when the host is running a single-player scenario, and when the host has not started the world yet.
- Waiting to join shows that it is still trying. The wait was one unchanging line, so a session that was going to work looked exactly like one that never would. It now counts up, and after a minute and a half it says the host may have gone and suggests leaving and trying again.
Notes
Your older machines get their memory and cores back the moment you load. A save written before this release records the wear setting under its old meaning, where it applied to everything a machine had. It is corrected on load so that it applies to disk speed alone. Expect available memory and cores on your older servers to jump back up to what you originally bought, and their storage speed to be the only thing still down. Nothing moved, nothing was bought, and there is no downtime: capacity that was being held back is simply being reported honestly again.
If a rack had tipped into being oversubscribed purely because the machines in it had aged, that clears itself on loading, and the customers on it should recover without you doing anything.
Saves written by this version cannot be opened by v0.1.32, so keep an older file if you intend to go back.
Multiplayer sessions need every player on the same version, as with v0.1.32.
If you read the API, a machine now tells you how much memory and disk it has. physical_mem_mb and physical_ssd_gb sit beside the physical_vcpu that was already there. Before this, processors had a headline figure and memory and disk did not, so anyone reading the API had to work a machine's total memory back out of its free memory and its percentage used. That no longer gives a wrong answer, but it was never something you should have had to calculate. Both figures are fixed for the life of the machine.
Two fields change meaning. A machine's iops_capacity used to report the figure on the box. It now reports what that machine's disks can actually sustain today, after wear, which is the same number the game itself places storage against. Compare iops_actual to it as before, but do not treat it as a fixed property of the model any more, because it falls slowly as the machine ages. For the same reason free_ssd_iops is the one free figure still measured against a worn ceiling: free memory, free processor and free disk space are all against the nameplate now. The wear_factor and capacity_wear_pct fields beside it are unchanged in name and shape, and are now storage figures alone rather than a discount on everything the machine has.
A cable's duplex is the second. It used to be switched off whenever either end of the run sat in a QSFP port, so an SFP to QSFP fibre lead reported as though it were not a duplex lead at all. It now reports only whether the cable itself is duplex, and a new qsfp_end beside it says which end sits in a QSFP port: 0 for neither, 1 for the first end, 2 for the second, 3 for both. If you were reading duplex to decide how to draw a run, read both fields now.