Multiplayer is now in the full release, labelled experimental while it settles. There is also a shopping cart in the Shop, big sites hitch less, and the Capacity and Internet consoles report honest live figures.
Added
- Multiplayer is in the full release, and it is experimental. No beta branch needed. Expect rough edges, save often, and tell us what breaks.
- Any save can be opened solo or hosted. Press Continue or Load and pick. A world you played alone can be hosted, and a world you hosted can be picked up on your own.
- A shopping cart in the Shop. Set a quantity, add what you want, then order everything at once. Everyone in the session shares one cart and watches it fill.
Changed
- The Shop's per-item Buy button is gone. The cart is how you buy now, so a basket is charged once instead of a payment per item.
- Saves are no longer tagged multiplayer. A save has no mode of its own, so the Load list drops the tag and nothing resumes hosted without you asking for it.
- The multiplayer card now says whether a session is healthy, not just the ping. Each player gets a plain verdict and a meter reading how far behind their world is, which ping cannot show.
- A distant player is no longer flagged as a problem. Someone on 150 ms who is keeping up reads as good, and the warning is driven by how far behind they have fallen instead.
- The host's total upload is now on the card. It sits in the footer beside the world's speed, so you can see what a busy session costs you without opening the pause menu.
- The pause menu's player list says the same thing. It carries the verdict beside each ping, so the two screens cannot tell you different stories about one session.
Fixed
Consoles
- New bonds appear in the switch console straight away. Bonding two links used to leave the Bonds tab empty until you reloaded the save, because the change never reached the console.
- Marking all messages read no longer freezes the game. The comms window rebuilt every channel row and the whole message pane on that one click, even though no message had changed.
- Typing in a console filter box no longer stutters. Every keystroke rebuilt the whole table; the filter now waits for you to stop typing, then applies.
- Names in the audit recorder console stay current. It resolved every name once when you opened it, so anything renamed or added later still showed under its old label.
- Opening a switch, security gateway or gateway console no longer stalls a big site. It re-scanned every cable for every bond, and every switch pair against every cable, four times a second.
- Dismissing the alert bar gives the space back. The empty band used to sit at the bottom of the console for good. It now clears once you move the pointer away.
- The alert bar's dismiss says what it does. It hides the list until something new fires. Your incidents stay open and the count in the top bar still carries them.
Internet console
- Capacity no longer counts lines that are not patched. A dark line was adding its full speed to your headroom, so the panel offered room you could never use.
- Each line shows its load in both directions. A line can be full outbound and idle inbound, and a single bar could not tell you which way it was pinned.
- A line on a router with no machines behind it is now called out. Buying more capacity there does nothing, and the panel says where it has to land instead.
Deliveries
- Burying a box no longer says it vanished. You were told the delivery was gone, then told it was buried. Only the second one was ever true.
Multiplayer
- The pause menu and the multiplayer card no longer disagree on speed. They measured the same upload two different ways, so one link read two different rates depending on which screen you opened.
- A broken host can no longer take your game down with it. An unending transfer from the host you joined is now cut off, dropping the connection instead of the whole game.
Capacity console
- Fleet CPU and storage load no longer depend on where you are standing. The client summed per-machine readings of different ages, so the figure drifted and two players in different rooms could read different totals.
- Fleet CPU could read higher than it really was. The client looked up each machine's core count in the hardware catalog, and a machine missing from it counted its workload but no cores.
- The bottleneck headline is affected by both of the above. It picks whichever of rack space, power, CPU, memory or storage is under most pressure, so a wrong CPU figure could win it.
Performance
- A full site with many tenants hitches less. Working out why each tenant is short of capacity re-checked every machine in the site, twice over, once per tenant. It is now done once.
- An uptime check no longer slows the game down. Polling the built-in health address made the game rebuild its entire world every second, for a caller reading nothing about that world.
Notes
- Multiplayer is experimental, and the menu says so. Both buttons carry the label. It is new to the full release, it will have rough edges, and your reports are what settle it.
- Single-player is unaffected by any of it. Nothing about a solo run changed because multiplayer shipped, and you never have to touch it.
- Multiplayer needs matching builds. What the game sends over the wire changed, so everyone in a session must be on v0.1.52. A v0.1.51 client cannot join.
- Hosting needs Steam running. Lobbies are Steam lobbies, so the multiplayer buttons stay disabled until it is up, and say why.
- Saves work in both directions with v0.1.51. The format is unchanged and no action is needed.
- API: `/health` no longer counts as a read. The response body is identical. What changed is the side effect: polling it used to keep the world model warm, and no longer does.
- API: `age_ms` climbs if `/health` is all you poll. Publishing stops a minute after the last read, and `/health` is no longer a read. Poll any `/api/v1/*` endpoint or `/metrics` to keep it fresh.
- API: three new fields on the capacity resource. `used_vcpu_milli` and `used_ssd_iops` are live demand across serviceable machines; `total_ssd_iops` is the matching wear-adjusted ceiling. All three are additive.
- API: `used_` and `free_` are not opposites. `free_vcpu_milli` is what you could still place on; `used_vcpu_milli` is live demand. `used + free` does not equal `total`, and a contended site reports used above total.