introduce the pin economy #237

Merged
sermuns merged 6 commits from pins-economy into main 2026-10-26 10:24:59 +00:00
Owner

Adds pins, the campus currency from #231, and the model rockets from #227.

Pins

  • Wallet: a u64 balance, owned bitset, worn look slots, visited buildings and passive/odometer progress, saved locally (~/.local/share/liuverse/pins.json natively, localStorage on the web).
  • Catalog: liuverse-world::economy, so the server can read it later. Prices are u32; the cap and the crown unlock by finding buildings.
  • Earning: one pin a minute idle, one per hundred meters ridden, five per recycling return, twenty-five for the first entry into each building, ten per goal, and placement pins when an event finishes. The fountain is a one-pin pure sink.
  • Sinks: the physical shop and fountain wishes.

The shop is AutoMat

There is no GUI shop. Both OSM AutoMat landmarks — Vallastaden at Kunskapslänken and Colonia by Colosalen — anchor a row of racks outside their own facades; each catalog item stands on its own shelf and the row follows the building around corners. Walk up and press E to buy it or wear it if owned. Item labels show the price, owned or worn.

Each shop has a warm red dot with a white ring on the map, so both are findable without hunting the facade.

Rockets

The seventh rack sells a reusable model rocket. It has a thrust phase, a coast to apogee, a parachute and a landing. A deterministic campus wind drifts the chute, and the launch notice names its speed. The rocket is an inventory item: left click launches, right click or E retrieves a landed one. One left out of reach returns to the shop instead of stranding the player.

HUD

The top-right status is three regular-sized lines on a translucent plate: mode and player count, place, then pins, goals and a nearby AED. The multiplayer address and fps behind F3.

just check passes, including the bake test that the campus carries the pin terminals, that every AutoMat anchors a shop, and that one shop stands by Colosalen.

Closes #231.
Closes #227.

Adds pins, the campus currency from #231, and the model rockets from #227. ## Pins - **Wallet:** a `u64` balance, owned bitset, worn look slots, visited buildings and passive/odometer progress, saved locally (`~/.local/share/liuverse/pins.json` natively, `localStorage` on the web). - **Catalog:** `liuverse-world::economy`, so the server can read it later. Prices are `u32`; the cap and the crown unlock by finding buildings. - **Earning:** one pin a minute idle, one per hundred meters ridden, five per recycling return, twenty-five for the first entry into each building, ten per goal, and placement pins when an event finishes. The fountain is a one-pin pure sink. - **Sinks:** the physical shop and fountain wishes. ## The shop is AutoMat There is no GUI shop. Both OSM `AutoMat` landmarks — Vallastaden at Kunskapslänken and Colonia by Colosalen — anchor a row of racks outside their own facades; each catalog item stands on its own shelf and the row follows the building around corners. Walk up and press `E` to buy it or wear it if owned. Item labels show the price, `owned` or `worn`. Each shop has a warm red dot with a white ring on the map, so both are findable without hunting the facade. ## Rockets The seventh rack sells a reusable model rocket. It has a thrust phase, a coast to apogee, a parachute and a landing. A deterministic campus wind drifts the chute, and the launch notice names its speed. The rocket is an inventory item: left click launches, right click or `E` retrieves a landed one. One left out of reach returns to the shop instead of stranding the player. ## HUD The top-right status is three regular-sized lines on a translucent plate: mode and player count, place, then pins, goals and a nearby AED. The multiplayer address and fps behind `F3`. `just check` passes, including the bake test that the campus carries the pin terminals, that every AutoMat anchors a shop, and that one shop stands by Colosalen. Closes #231. Closes #227.
A local wallet saves a u64 balance, owned bitset and worn looks. The catalog lives in liuverse-world for the server's future; vending machines open it, printers sell the paper hat, recycling pays for bottles, rides and buildings pay the odometer and map, events pay placements, and goals are quick money. Hats and shirt colors are visible locally only, as the first shape of a wardrobe.

Closes #231.
The GUI shop is gone. The AutoMat landmark at Studievägen now anchors a rack row outside its facade: each catalog item stands on its own shelf, labelled with its price or whether it is owned, and E buys or wears it. The racks are derived from the bake so a rebake moves them with the shop.

The top-right status is three quiet lines now: mode and player count, place, then pins, goals and a nearby AED. The server address and fps moved behind F3.
The shop's seventh rack sells a reusable model rocket. It thrusts off the pad, coasts to apogee, opens a parachute and lands; a deterministic campus wind drifts the chute, and the launch notice names its speed. The rocket is an inventory item: left click launches, right click or E retrieves a landed one. One that lands out of reach, or is left too long, returns to the shop instead of stranding the player.

Closes #227.
The shop has a warm red dot with a white ring in map view and its name just above it, so it is findable without hunting the facade. The map marker is a frame field, so the HUD keeps projection and color independent.
OSM carries two AutoMat convenience stores in the bake: Vallastaden at Kunskapslänken and Colonia by Colosalen. Both now anchor their own rack row, their own item labels and their own map dot, and the bake test names Colosalen to prove the second one is there. The top-right status now uses the regular text size.
The native wallet was guessing XDG_DATA_HOME or HOME. dirs::data_dir now gives the platform's own data directory on Linux, macOS, Windows and the mobile targets, while the web build keeps localStorage. Checked with native and wasm32 builds.
sermuns force-pushed pins-economy from 222de3561c to 72f751604e 2026-10-26 10:24:46 +00:00 Compare
Sign in to join this conversation.
No description provided.