# Changelog

## 0.4.0 — Play Update

### Added

- **Character Studio:** build the character other players see. Start from a
  preset or shape your own: skin, eyes, hair, beard, glasses, earrings,
  headphones, three outfits with their own colours, and sliders for height,
  build, face width, eye spacing and nose. The preview is the real 3D model —
  drag to rotate, scroll to zoom, switch between full body and face, and watch
  it stand, walk or swing. Save look writes to the current framework character;
  Reset changes returns to the last saved state. Open it from the launcher or
  from Minigolf's welcome screen. The `roadvr_characters` table is created on
  resource start.
- **Minigolf:** twelve holes for up to six players in a private room with a
  six-letter code. The course opens full size in first person: walk with WASD,
  aim with the mouse, hold and release to putt, and press F to return behind
  your ball. Everyone watches the same authoritative ball path, then the next
  player takes their turn. The first six holes each add an obstacle the ball
  passes through — a tunnel through a hill, a jump over a creek, a turnstile,
  a bridge to roll over or under, a half-pipe and a loop — and the next six
  add raised landings, side slopes, double crests and rotating gates. The ball
  has height: it flies off ramps, lands with a small bounce, rolls on decks and
  follows tubes and loops, and water returns it to where the stroke started.
  Add a demo player to practise alone. New `Config.Minigolf` block with
  `maxPlayers`, `maxStrokes`, `turnSeconds`, `lobbyMinutes` and `holeSelect`.
- **Chess:** a private room with a six-letter code, against a friend or the
  computer at Beginner, Club player or Strong. The host lays a 3D board down
  on a table, a counter, a car roof or the ground; everyone who joins sees it
  at that spot in the world and walks up to play. The board is lit by the
  in-game clock and weather — white at noon, dim and blue at night, glossy in
  the rain. The window keeps the familiar side: time controls from one minute
  to thirty with or without increment (or no clock), a move list, captured
  pieces, draw offers, resignation and rematches with swapped colours. The
  rules and the engine live in Lua and the server validates every move. A
  headset that comes off keeps the seat for `Config.Chess.awayMinutes` while
  the clocks run, and the camera-switch key is locked during a game. New
  `Config.Chess` block.
- **Arrange the home screen:** hold an app, or press Edit, and drag apps into
  your own order across pages. The arrangement is saved per character; Reset
  order returns to favorites first, then recent apps.
- **Icon styles:** a new App icons tab in Settings with RoadPhone's icon
  packs — Studio, Outline and Monochrome — redrawn for every built-in app,
  plus round or square icons and the glass effect on or off. Apps from other
  resources keep their own icons.

### Improved

- Minigolf has sound: the putt, the ball rolling, bounces, the cup, water and
  birds in the park, synthesised in the interface without shipping audio files.
  They follow the camera, so a shot across the green is quieter than your own.
- The putter now swings the moment you release the button instead of waiting
  for the server's answer, which removes the small hitch after every stroke.
- The loop is rebuilt as a smooth steel channel hanging from a frame, and the
  park around every hole has hills, broadleaf trees and conifers, shrubs,
  meadow grass and wild flowers.
- Less work while nothing moves: the interface stops asking for frames when
  the picture is unchanged and wakes on camera, window, widget and settings
  changes; camera messages are sent when something actually moved; the Clock's
  display timer runs only during a run; hidden decorations pause their
  animations. Rendering quality, input rates and animation speeds are
  unchanged.

### Fixed

- A ball can only be putted from its own level. Standing on the apron below a
  raised hole no longer reaches it.
- The half-pipe's divider now runs the whole length of its hole, so the chute
  is the only way to the cup side.
- The headset can no longer be taken off by accident while a minigolf course
  or its score menu is open. Death, vehicles and third person still remove it.
- A brief stutter no longer throws a player out of the course and into the
  score menu.

### Updating

- Replace client, server, shared files and the built NUI together, then
  restart RoadVR.
- Merge the new `Config.Minigolf` and `Config.Chess` blocks into your
  `config.lua`. Missing keys fall back to the shipped defaults.
- The `roadvr_characters` table is created automatically on resource start.
- Minigolf and Chess place objects in the world and are on
  `Config.Environments.blockedApps`, like every app that does.
- Local checks and browser reviews do not replace an in-game test with two
  clients.
