Chapter 22 · Trust
Fair by proof: rebuilding Volley so no character always wins
Volley had a court with no rules, opponents whose results never changed, and a ball that scored for you off the far wall. The rebuild starts from simulations and ends at a balance matrix every pairing has to pass.
The Margin4 min read
The bug report came as one message from the founder, after he went back to Volley once the new games were in:
"some characters always win while some characters always lose"
"when the ball hits the wall on the other side, it always counts as a win"
"if the ball is hit out of our own court, there is no way to fling it back"
He also asked for true physics, and for both hands, "because one hand looked really stupid".
Volley is the oldest game in the break room. It started on the phone: two of the six drawn characters on a paper court, an ink ball, one thumb. The cast is Jot, Niblet, Whorl, Tare, Simmer and Vesper, and you play as one of them.
The court had no referee#
The wall one is the easiest to explain, and a little embarrassing. The old court asked one question when a rally ended, which was whose floor the ball touched, and that side lost the point. There was no idea of "out" anywhere in the code. A ball you smashed into the far wall dropped on the far side, so the far side lost, and you got a point for what any real game would call your fault.
Before changing anything we replayed the old court with no screen, with a simulated person on one side: 7,200 rallies, every pairing of the cast, 200 seeds each. The computer's side lost 4,860 of them, and 3,699 of those, 76%, ended after the ball touched a wall, every one a point for the person. Play as Niblet with the aim assist on, and your serve flew into the far wall 200 times out of 200, before the computer ever touched it.
The "always win, always lose" one had a plainer cause. Every character carried its own speed, reach and power, plus a special move, so the cast was never on equal terms. In the same replay, Tare lost every rally it played as the computer's character, and Niblet lost 91%. On your side of the net, Simmer lost 71% and Vesper 63%.
The rebuild nearly walked into the same hole from a different side. The new game mind, shared by every game, gives each character a temperament, and its error model uses that temperament to set how wide a character's mistakes are. Plug that straight into Volley and a steady, precise character becomes a better player than a jumpy one, permanently.
What the new court does#
The referee now plays beach volleyball. The ball is live until it touches a floor. Land it in their court and you win the point. Out, or off a wall, or off the ceiling, or off anything that isn't a court, goes against whoever touched it last. You get up to three touches a side, and since there is one player a side, all three are yours to pass to yourself, set and hit. A ball can clip the net and play on, even on the serve. Whoever wins a rally serves the next one. Match is a single set to 11, won by two. Official is the real beach game: best of three, sets to 21, 21 and 15, each won by two, a block counts as a touch, and you change ends every 7 points (every 5 in the third). The only call we skip is double contact on a set. A set here is a planned contact that comes off clean every time, so there's nothing to judge, and the rules card says as much.
The space behind each court is playable now, so a ball that flies out off your own touch can be chased down and dug back in. Contacts happen on the character's actual arms. Both figures have two arms, on the web and on the phone.
The opponent decides what to do with each ball by listing what it could do (pass, set, spike, send it over, dive) and scoring those options with the shared game mind, leaned by its temperament. Underneath, though, the error model is handed a neutral temperament. Every character reacts, runs and aims with the same spread at a given difficulty. Temperament only picks the shot. Niblet goes for the hit, Whorl builds the three-touch play, and neither of them is better at volleyball.
The bar#
The computer plays itself, every pairing of the six characters from both sides of the net, on Normal. On every test run, 144 matches, each character has to win between 45% and 55% of the points it plays. The latest runs put them between 47.1% for Simmer and 53.4% for Vesper. Match wins swing more at that size, from 37.5% for Niblet to 67.5% for Vesper, and 144 matches are too few to hold match wins to the same bar, so the everyday test doesn't try.
The full run is 2,160 matches, 60 for every ordering of every pair. There the bar covers everything: every pairing's points, each side's matches and each character's matches have to land between 45% and 55%. On Oct 7 it passed. Match wins ran from 45.2% for Simmer to 53.5% for Vesper, and the left side of the net won 49.8%.
On the new court, a simulated average player on Normal gets about six crossings of the net a point and a match of five and a half minutes. About 4% of points end with the ball landing out of court, a quarter end off a wall and another quarter off something in the scenery, and every one of those now goes against whoever touched the ball last.