===============================================================================
 Basketball — for the LinuxDoors AppImage Store
===============================================================================

 Name:          Basketball
 Version:       0.2  —  AN EARLY VERSION
 Price:         $0.00
 Author:        LinuxDoors.com
 Created:       September 23, 2026, 5:12 AM
 Kind:          A LinuxDoors AppImage Software Product
 File:          Basketball.AppImage
 Size:          38,668,792 bytes  (37 MB)
 SHA256:        7255445ef0686a0eac30e1a29d8677de948a0921da72f9c904e09b7ab0f94202

 Bug reports:   bugs-report-basketball@linuxdoors.com

 CARD DESCRIPTION (the one line the store shows under the name)

     An open court, a hoop and a crosshair on the glass, drawn rather than
     photographed.


-------------------------------------------------------------------------------
 THIS IS AN EARLY VERSION
-------------------------------------------------------------------------------

 Version 0.2. It is a whole game and it plays properly, but it is early,
 and there will be rough edges that only turn up once somebody other than
 its author is the one shooting.

     bugs-report-basketball@linuxdoors.com

 If a shot does something a shot should not do, please write. Say what you
 did and what happened.


-------------------------------------------------------------------------------
 AIMING ON THE SQUARE
-------------------------------------------------------------------------------

 The crosshair sits on the painted square on the glass, not in a box in the
 corner of the screen. That is not decoration: the square is what a person
 aims at, it is why it is painted on the backboard in the first place, and a
 crosshair sitting on it needs no key and no explaining. Across is across,
 and higher up the square is deeper into the ring — which is exactly what
 higher on the glass does to a real shot.

 It tells the truth. The speed the ball leaves at is solved backwards from
 the spot you picked, so where the crosshair is, is where the ball goes.

 And it says what it would do, in a word: "in" when the ball drops, "ring"
 when it is on the rim, "glass" when it is going off the board. That word is
 not a guess. Two hundred and thirty-one real flights are simulated when the
 court is built — a fifth of a second, once — and the readout is what those
 flights actually did, which is why it never disagrees with the shot you get.

 The sweeping lines can be turned off on their own, leaving the crossing and
 the shaded scoring patches. Once you can read the crosshair the lines are
 scaffolding, and the game is better looking at the hoop than at them.

 And the crosshair has a switch of its own beside it. The two are one thing
 in the sweeping modes and quite different in the pointing ones: Pool and
 Flick have no sweeping lines at all — the aim is wherever the mouse is — so
 the only thing the targeter draws there is a ring following the pointer,
 sitting over the one part of the picture worth looking at. Off, there is
 nothing between you and the hoop. The shaded patches stay, and so does the
 arc if you want it, because each of those is its own switch too.


-------------------------------------------------------------------------------
 NINE WAYS TO SHOOT
-------------------------------------------------------------------------------

     Pool        point at the square and pull back, the way a cue works.
                 One movement. This is the one it starts on.
     Drift       the crosshair wanders about the square on its own and you
                 press when you like the look of it. No pulling. This is
                 the one to play Rapid fire in.
     Flick       flick up with the mouse and click to let go.
     Arcade      two sweeping lines across the square, one press stops
                 both, then you pull back and shoot.
     Arcade #2   the crosshair never stops. Hold and drag upwards to
                 wind the throw up, and let go when it is where you want
                 it — the aim is read at the instant you release.
     Quick       the same two lines, with the pull already loaded. One
                 press stops both and the bar is at once on the shot the
                 crosshair asked for. Let go without moving the mouse and
                 it goes in; drag to trim it either way.
     Classic     across first, then depth, and it shoots itself.
     Snap        both lines, one press, shot for you.
     Pitch       one line at a time, then shoot it yourself.

 The wandering in Drift is two sines of unrelated speed on each axis. A
 single sine is a pendulum and is learnable in three shots; a random walk
 jitters and looks broken. Two that do not divide into each other drift
 about the square for a long time without quite repeating, and sit over a
 scoring spot about a fifth of the time — which is a window worth waiting
 for rather than a lottery.

 Arcade #2 is the other end of the same argument. Every other mode splits
 the shot in two — settle the aim, then deal with the power, each in its own
 time. This one refuses to. The crosshair keeps drifting the whole while you
 are winding the throw up, and the aim is read at the instant you let go, so
 the pull is not a job done in peace: it is the thing you are doing while
 the only thing that matters drifts past the spot you wanted. It is the
 hardest of the modes, because it is the only one where hesitating costs
 something.

 The pull runs the other way in it — down to up. Dragging back to throw
 harder is how a cue works, and a cue is drawn back; an arm that throws a
 ball upwards goes up. In a mode where the wind-up happens while you are
 watching the crosshair move, the hand going the same way as the ball is the
 one that does not have to be thought about.

 And the green band moves with the crosshair rather than standing where it
 was when the button went down — otherwise it would be a promise about a
 spot the aim has already left.

 Quick is there because the wind-up is a second game bolted onto the end of
 the first. Everywhere else the bar starts at nought and has to be dragged
 up, so a press-and-release takes no shot at all — the ball drops at your
 feet. That is fair enough when you have time. It is the wrong thing to ask
 of somebody who has just stopped two sweeping lines and wants the shot they
 were promised: the aim was the hard part and it is already done.

 So the bar opens on what the aim asked for. Of the aims the crosshair calls
 a score, letting go at once with no mouse movement whatever:

     Quick    8 of 8 go in
     Arcade   0 of 8   — the bar was at nought

 Dragging still works exactly as it did, from there rather than from zero:
 back for more, forward for less.

 And when two lines sweep at once they start at opposite ends of their
 tracks. Started together at the near end, every quick press gave the same
 short shot, and the fastest thing a player could do was also the worst shot
 on the board.


-------------------------------------------------------------------------------
 THE SHOT, AND WHY THE ARC IS THE FIXED THING
-------------------------------------------------------------------------------

 Pull back and let go, or hold Space and release.

 What is held fixed while the shot is solved is the arc, not the angle, and
 that is worth explaining because the obvious choice is the wrong one.

 A shooter's hands do the same thing every time, so fixing the release angle
 sounds right. It is provably wrong here. At a fixed angle the speed needed
 to pass through the height of the ring is not a straight line against
 distance: it has a minimum where the arc just grazes that height, and
 either side of the minimum the same speed answers two different distances —
 one of which is the ball on its way *up*, which is not a shot at all.
 Measured on this court, the fixed-angle model wanted 281 in/s to land a
 foot short of the ring and 278 to land in the middle of it. Harder meant
 shorter, the power bar could not be inverted, and nothing ever went in.

 So the arc is what is held: the ball always goes the same distance over the
 ring at the top of its flight, and how far it travels is how hard it is
 thrown. That is also the truer description of a shooter — people keep their
 arc and let the angle flatten as they move back, which is exactly what this
 does. One answer for every distance, going the same way the whole time, and
 it inverts in a line rather than by halving.


-------------------------------------------------------------------------------
 THE GLASS
-------------------------------------------------------------------------------

 The backboard is a real surface and banking is a real shot. Half the depth
 track scores: eight inches of it drops the ball straight through, and
 thirteen and a half of it banks in off the glass.

 Three things make that work, and each was wrong first:

 The contact is on the skin of the ball, not at its middle. A ball is nearly
 five inches of radius, and waiting for its centre to reach the glass means
 it is already half buried in the board and comes off five inches too deep.

 It can happen more than once. A ball off the ring can go up into the glass
 and come down through it — a real and fairly common way to score — and a
 flag saying "this ball has banked already" quietly made that impossible.

 And how stiff the board is decides whether any of it matters. Eighteen
 pairs of numbers were tried; at seven tenths back and eight tenths kept,
 the band of deep aims that actually bank in is seven inches wide instead of
 the half inch a softer board gave. That is the difference between banking
 being a shot and banking being an accident.

 The ring gives back and never adds. It used to return a share of what
 arrived *plus* fourteen inches a second across and twenty-six upward —
 energy from nowhere, so a ball that crawled onto the rim left it briskly.
 Now a contact keeps about a quarter of what it had, which is why a rattle
 settles instead of dancing.


-------------------------------------------------------------------------------
 ONCE IT IS IN THE AIR
-------------------------------------------------------------------------------

 Move the mouse left or right and the ball leans that way. Arrow keys do the
 same. It is worth an inch and a half by the time the ball reaches the ring:
 enough to save one rattling on the rim, nowhere near enough to rescue a
 shot that was never close.

 **Mouse assist** is a separate toggle and goes further — with it on, the
 mouse flies the ball for the whole of its flight, up the court as well as
 across. That is frankly outside the physics, which is exactly why it is a
 switch you turn on rather than how the game behaves.

 **Unlimited shots** is another. The game stops ending, so practising is not
 interrupted every forty-five seconds by a scoreboard.


-------------------------------------------------------------------------------
 WHAT COUNTS AS A BASKET
-------------------------------------------------------------------------------

 One thing, and only this: the ball crossed the plane of the ring on its way
 down, with its whole width inside. Nothing below the ring counts, whatever
 it is doing there.

 That is worth stating because the game used to get it wrong, in the one
 place that is hardest to see. A ball that had caught the ring and rattled
 out was still being asked, every frame, whether it was below the ring and
 falling and somewhere over the middle — and that is true of a ball a foot
 underneath the hoop, dropping away, that happens to pass back across the
 centre. An in-and-out could therefore be called a basket, with the swoosh
 and the scoreboard to match. It now has to be a crossing, and a crossing
 only, exactly as a ball arriving cleanly has always had to be.

 Where the question is asked matters as much as when. A frame is three or
 four inches of fall at shooting speeds, and the ball is travelling sideways
 throughout, while the ring leaves four and a quarter inches of room around a
 ball that fits through it. Asking at the end of the frame therefore asked
 inches past the ring, always in the direction the ball was going — turning
 some that went in into misses and some that missed into baskets. The game
 now works back to the exact point the ball passed the ring's height and
 asks there, and a bounce comes off the ring itself rather than off a spot
 the ball had already gone by.

 Measured over 7,503 shots — every aim point on the crosshair's grid at three
 different speeds — 64 baskets that had been awarded with the ball as much as
 41 inches below the rim are gone, and no basket is now given anywhere but at
 the ring.


-------------------------------------------------------------------------------
 THE COURT
-------------------------------------------------------------------------------

 It is open. There was an arcade cage — mesh walls up either side of the
 lane — and it has gone: a hoop on an NBA-sized floor with the markings
 painted on it, nothing boxing in the shot, nothing between you and the
 board.

 The hoop hangs with nothing under it. It stood on a post, and the post was
 the whole trouble: a hundred and twelve inches of pole under a thirty inch
 board is honest — that is how high a hoop is — but from the shooting line
 it ran most of the way down the window and was the first thing the eye
 found. Every camera that framed the post comfortably made the hoop too
 small; every camera that made the hoop worth looking at ran the post off
 the bottom of the screen.

 Six surfaces: Maple, Oak and Walnut boards, and Slate, Blacktop and Painted
 for a court that is outdoors. The markings are drawn to the court rather
 than sized by eye — key, circle, three-point arc with its straight legs
 down the sides — so what you are shooting over is laid out where it would
 be laid out.


-------------------------------------------------------------------------------
 FOUR VIEWS
-------------------------------------------------------------------------------

     1   From above     the plan
     2   Raked          the one to play in
     3   From the line  standing where the shot is taken
     4   Free 3D        drag it round with the right mouse button

 All four are one camera and one lot of drawing code, so the ball is where
 the physics says it is in every one of them.

 **From the line** is the hardest of the four to get right and the argument
 is worth setting out. Standing at head height ten feet from the hoop, the
 ground under the ring is twenty-nine degrees below the eye and the top of
 the arc is forty-seven above it — seventy-six degrees from one to the
 other, where an ordinary lens sees fifty-three. So there is no casual
 answer: point the camera up for the ball and the floor is gone, point it
 down for the floor and the ball leaves over the top.

 It was measured rather than guessed. Every combination of eye height,
 distance back, lens and framing point was tried against four requirements
 at once — the whole backboard visible, the ring, some floor, and the ball
 in the window for the whole of every flight — keeping only those with
 forty-five pixels to spare on all four, and taking the one of those with
 the largest hoop.

 And the hoop does not move. For a while the view followed the ball, tilting
 up as it rose the way a head does. It made the hoop bigger and it was
 wrong: the rim and the board slid up and down the screen while the ball was
 in the air, and a hoop that moves is not a hoop you can aim at.

 Zoom works, on all of them. It did not, in any of these three games, for a
 long time and invisibly: the framing was recomputed with the zoom applied,
 so the wheel moved the eye closer and the framing stood back by exactly the
 same factor. The wheel turned, the arithmetic ran, and the picture did not
 change.


-------------------------------------------------------------------------------
 THE SOUND
-------------------------------------------------------------------------------

 There is not a recording anywhere in the program, for the same reason there
 is not a photograph: the ring is a handful of metal partials struck hard
 and left to ring down, the glass is the same idea an octave lower and
 damped so it thuds where the ring sings, the net is filtered noise, and the
 end of the game is a square wave that sags.

 The partials of the ring are deliberately not whole multiples of each
 other. A hoop is a bent tube, not a string, and its overtones do not line
 up — which is the whole difference between something that sounds like metal
 and something that sounds like a note.

 Six sounds, and they are worked out in about twenty milliseconds the
 first time they are wanted.

 There were seven. The ball leaving your hands had a whoosh of its own,
 and it had to go: it was made of the same stuff as the net. Both were
 filtered noise — one at three hundred to three and a half thousand
 cycles, the other at nine hundred to four thousand — and a second apart
 they did not read as two things happening. They read as the swish
 happening twice, which made every basket sound like a mistake. The net
 is the one worth keeping; the release already has the power bar and the
 ball itself to announce it.

 Each one begins and ends at silence, which is less obvious than it
 sounds. A sound that simply stops while it is still moving is a step down
 to nothing, and a step is a click. The chime was the bad one: two sines
 still at a ninth of their height when the samples ran out, so a basket was
 a swish, a chime, and then a tick a third of a second later that sounded
 like something else in the room. Half a millisecond of rise and
 twenty-five of fall — far too short to shorten anything, long enough to
 land on zero. How loud each one is comes from how hard the
 ball arrived, so a deliberate bank off the board and a ball brushing it on
 the way past are not the same noise.

 It does not use Qt for any of it. QtMultimedia is not in the runtime these
 programs are packaged on, and putting it there drags in a media stack
 several times the size of the game in order to play six noises. Instead
 the mixing happens in the game and the result goes down one pipe to
 whatever the desktop already plays sound with — pipewire, pulse or alsa,
 whichever is there. One pipe that stays open, rather than a program
 launched per sound, so a ball hits the ring and the sound is already on its
 way.

 And the pipe is deliberately tiny. This was the one thing that made the
 sound feel wrong rather than merely be wrong. A pipe on Linux holds
 sixty-four kilobytes by default, and sixty-four kilobytes of this is a
 second and a half of audio — so the mixer filled it, ran a second and a
 half ahead from then on, and the swish arrived when the ball was already
 back in your hands. Python's own eight kilobyte buffer sat on top of that,
 worth another third of a second.

 Nothing is gained by that lead. What is in the pipe is already decided and
 cannot be changed; a big pipe only buys the ability to fall a long way
 behind without anybody noticing, and mixing six short sounds does not fall
 behind. So Python's buffer is off and the pipe is set to four kilobytes,
 which is one page and the smallest a pipe can be — about ninety
 milliseconds. Measured: it ran 1,555 ms ahead of the ear, and now runs
 between 76 and 162.


-------------------------------------------------------------------------------
 AND THE SOUND RUNS AHEAD OF THE BALL
-------------------------------------------------------------------------------

 A tenth of a second is still visible. A ball and its noise a tenth apart do
 not look like the same event — they look like a ball, and then a noise.

 So the noise is not triggered by the contact. It is worked out *before* the
 contact, from the trajectory, and said early enough that it comes out of
 the speaker exactly as the ball arrives.

 It can be, because free flight has a closed form. The moment the ball next
 crosses the height of the ring is the descending root of a quadratic; the
 moment it reaches the face of the glass is a division; where it will be
 when it gets there is two multiplications. If that moment is inside the
 lead, the sound is called now. This is prediction and not cheating: it uses
 the ball's own position and pace under the same gravity the ball is about
 to fall under, and the only thing it cannot see is a lean that has not
 happened yet — worth about a sixth of an inch over a tenth of a second.

 Only ever the next contact, though, and that mattered. Calling both was
 audibly wrong: a ball on its way into the board is also, at that instant,
 on a path that passes the ring — so the ring was called, the glass turned
 the ball round, and the ring it had been promised never arrived. One
 phantom ping per rattle. Whatever happens first is the only thing whose
 path is known, because it is the thing that changes the path.

 A call is redeemed by its own contact and then forgotten, so a ball going
 round the ring three times rings three times. And a call that never comes
 true expires, so a lean that takes the ball off the rim after the rim was
 called does not silence the next one.

 Measured over 231 shots covering the whole aiming range — 464 contacts:

     every contact makes its noise            464 of 464
     noises with no contact behind them        15   (3%, and it was 55)
     when each noise lands       median 99 ms before the contact

 **Sound is a toggle** — in the Game menu, or the S key. Off closes the pipe
 rather than muting it: a game that is not making a noise should not be
 holding the sound device open either.

 **Ring** is a third switch, and the only one that starts on. It is the tin
 when the ball catches the rim — three times over when one rattles round —
 and it comes off on its own, taking nothing whatever with it. The swish
 still swishes, the glass still knocks, the ball still lands.

 That rattle is the most conspicuous noise in the game and it is made by
 missing, which is why it is the one worth being able to silence by itself.
 It was bundled with the glass and the landing at first, under a single
 switch called "swoosh only" — which did silence the rattle, and also took
 the knock off the board with it, and the knock off the board is the sound
 of a bank shot working.

 **Nothing but the swoosh** goes the whole way, for when one switch is
 wanted rather than three. One tick and the only sound the program makes is
 the ball going through the net — not the chime, not the ring, not the
 glass, not the horn at the end of the game. While it is on the other two
 decide nothing and are greyed out; they keep their settings and come back
 exactly as they were, but a switch that decides nothing should not look as
 though it does.

 So there are four, and each does one thing: sound, ring, chime, and nothing
 but the swoosh.

 **The chime is a toggle of its own, and it starts off.** A basket is the
 swish and nothing after it.

 The two were triggered at the same instant, which is not how they were
 heard. The swish is a burst of noise down to a twentieth of its height by
 three hundred milliseconds; the bell is still ringing at four hundred. So
 what reached you was the ball, and then a bell — and the bell read as a
 separate thing that had happened afterwards rather than as part of the
 same event.

 It is also the one sound here that is not something happening. The ball
 through the net is a noise the net makes. The chime is a machine
 congratulating you, and the score on the board has already done that. It is
 still there in the Game menu for anyone who wants the arcade back.

 And the toggle tells the truth. On a machine with no sound server it says
 so in as many words, takes its own tick off rather than claiming to work,
 and leaves the setting asking for sound — so the same copy on a machine
 that can play it starts making a noise again without anybody having to
 remember why it stopped.


-------------------------------------------------------------------------------
 THE GAMES
-------------------------------------------------------------------------------

 Seven of them. The aiming is the same in all seven and is yours to choose
 from the Aim menu; what changes is what ends the game, and where you are
 standing when you take the shot.


 RAPID FIRE — forty-five seconds

 The ball comes straight back the moment the outcome is known, rather than
 waiting for it to drop out of the net or finish rattling round the rim. The
 whole game is how many you can get away inside the clock.

 Every basket is worth two, flat: no double at the end, and no extra for a
 bank. Anything that makes one shot worth more than another is a reason to
 stop shooting and think, which is the opposite of the point of this one.

 It is the game Drift was built for — the crosshair wanders the square on
 its own and you press when you like the look of it, with no pulling and no
 second press.


 FRENZY — sixty seconds, and the last ten are doubled

 The same idea with a sting in the tail: everything scored in the final ten
 seconds counts twice, so a run at the end is worth more than a run at the
 start, and a miss with eight seconds left costs more than a miss with
 fifty. The scoreboard says DOUBLE while it is running.


 TWENTY-FIVE SHOTS — a straight twenty-five

 No clock at all. Twenty-five shots, and whatever they add up to. The one to
 play if you want to find out how good you actually are, because nothing is
 hurrying you and nothing is worth more than it should be.


 AROUND THE WORLD — seven spots along the floor

 Seven places across the front of the court, left to right. Make the shot
 and you move to the next one; miss and you stay where you are until you
 make it. Each one counts one, so the score is how far round you got, and
 finishing the seventh ends the game.


 AROUND THE 3 POINT LINE — any angle you like

 Played in Free 3D, and the angle you turn the court to is the angle you
 shoot from. Turn to the wing and the ball leaves from the wing; turn until
 the backboard is edge-on and you are shooting along the baseline, ninety
 degrees to the glass. Pinned to the arc the whole time, so every basket is
 a three.

 It sets the view and the aim itself — Free 3D, because no other view can
 say which way round the arc you are standing; and Arcade #2, so the
 crosshair wanders, never stops, and the pull runs upwards.


 AROUND THE ARC — the circuit, baseline to baseline

 The same shooting, made into a round. Seven places on the three-point line
 from one baseline to the other: ninety degrees, sixty, thirty, straight on,
 and back out the other side. Make one and it moves you to the next and
 turns the court to suit — you are never asked to find the spot yourself,
 because you would be shooting from somewhere you cannot see. Miss and you
 stay. Clear all seven and it is over.


 KNOCKOUT — until you miss

 It goes on for as long as you keep making them, and stops on the first one
 you do not. Nothing else ends it.


 A basket is two, off the glass is three — because that is a shot — and
 everything doubles in the last ten seconds of Frenzy. In Rapid fire
 everything is worth two flat: the game is how many, and anything that makes
 one shot worth more than another is a reason to stop shooting and think,
 which is the opposite of the point.

 A machine opponent takes alternate shots in the games with a fixed number
 of them. It plays the same game you do — it picks a spot, then it has to
 stop the lines — and its skill is how close it gets. Over twenty-five
 shots it averages twelve at easy, nineteen at fair and twenty at hard.


-------------------------------------------------------------------------------
 SHOOTING FROM ANYWHERE ON THE ARC
-------------------------------------------------------------------------------

 The two arc games are played in Free 3D, and the angle you turn the court
 to is the angle you shoot from. Turn to the wing and the ball leaves from
 the wing; turn until the backboard is edge-on and you are shooting along
 the baseline, ninety degrees to the glass. They select Free 3D themselves,
 because the other views cannot say which way round the arc you are standing
 — and they set the aim to Arcade #2, which is how they were asked for.

 Every shot is worked out in the shooter's own frame — across, along, up,
 with the ring straight ahead — and that frame is then turned about the
 ring to put it on the court. That is why this cost almost nothing: the ring
 is a circle, so every test against it reads the same whichever way you
 turn, and the arc, the power bar and the crosshair are the same arithmetic
 they always were.

 The backboard is the exception, and it is the interesting one. A board is
 not a circle; it faces one way. So the glass is the single thing checked
 where it actually is rather than in the shooter's frame, and the
 consequence falls straight out of the geometry rather than being written
 in. Counting the aims that bank in, from each angle:

     straight on      28
     thirty degrees   24
     sixty degrees    23
     ninety degrees    9

 From the corner the board is edge-on and there is almost nothing to bank
 off, exactly as on a real court.

 The table of what-scores-where is rebuilt for each angle and kept, rounded
 to five degrees. A table is two hundred and thirty-one real flights and
 about eighty milliseconds — nothing once, a stutter on every frame of a
 drag, and five degrees of stance moves a landing point by less than the
 table can see anyway.

 The circuit turns the camera itself rather than asking you to find the
 spot, because otherwise you would be shooting from a place you cannot see.


-------------------------------------------------------------------------------
 DRAWN, NOT PHOTOGRAPHED
-------------------------------------------------------------------------------

 One lamp over the court, and everything shaded against it. The floor is
 boards with the grain drawn in three dimensions so it converges the way the
 boards do; the glass is glass, with the room showing through it and a
 highlight down one side; the ring is a run of short arcs so it can be lit
 along the side the lamp is on, because a ring that is one colour all the
 way round is a circle rather than a tube; and the net is twelve strands
 that curve inwards and lift when a ball goes through.

 The ball has six things going on and every one is something a real ball
 does: the lit body, the soft band where the light gives out, light bouncing
 back up off the pale boards into its underside, a thin rim from the room
 behind it, a small hard highlight offset towards the lamp rather than
 centred, and the pebbling, which is what a basketball has instead of a
 polish and is why it never looks wet. The seams turn as it flies.


-------------------------------------------------------------------------------
 THE REST OF IT
-------------------------------------------------------------------------------

 The arc of the shot shown or not, as you like.
 The shaded patches that say where a shot would land, shown or not.
 Tickets, a prize wall, and best games kept with the date.

 Settings live in ~/.config/basketball/basketball.save. A setting in there
 of the wrong shape is ignored rather than fatal — a game that will not
 start because of one line in a save file is a worse outcome than a game
 that starts on its defaults.


-------------------------------------------------------------------------------
 KEYS
-------------------------------------------------------------------------------

     Space      press, and hold-then-release to shoot
     ← →        lean on the ball once it is in the air
     1 2 3 4    from above, raked, from the line, free 3D
     S          sound on or off
                (the ring, the chime and nothing-but-the-swoosh
                 have their own switches in the Game menu)
     right drag turn the court round, in the views that turn
     wheel      closer and further away
     Ctrl+N     another game
     F1         how to play
     Esc        out


-------------------------------------------------------------------------------
 RUNNING IT — NOTHING TO INSTALL
-------------------------------------------------------------------------------

     chmod +x Basketball.AppImage
     ./Basketball.AppImage

 Python, Qt and PySide6 all travel inside it. Nothing on the machine is used
 and nothing on the machine can conflict with it.

 On the command line:

     ./Basketball.AppImage --game rapid --aim quick
     ./Basketball.AppImage --version

 On a machine without FUSE, add --appimage-extract-and-run.
