===============================================================================
 Bowling — for the LinuxDoors AppImage Store
===============================================================================

 Name:          Bowling
 Version:       0.1   —  AN EARLY VERSION
 Price:         $0.00
 Author:        LinuxDoors.com
 Created:       September 19, 2026, 1:18 PM
 Kind:          A LinuxDoors AppImage Software Product
 File:          Bowling.AppImage
 Size:          38,611,448 bytes  (37 MB)
 SHA256:        09425a9ee781c97709844252889b5e56080a92ee38e557e72eb931fe777b5213

 Bug reports:   bugs-reports-bowling@linuxdoors.com

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

     A lane, ten pins and ten frames, drawn rather than photographed.


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

 Version 0.1. It is a whole game and it plays properly, but it is early.

     bugs-reports-bowling@linuxdoors.com

 If a ball or a pin does something it should not, please write. Say what you
 did and what happened.


-------------------------------------------------------------------------------
 AIMING, AND ROLLING IT
-------------------------------------------------------------------------------

 Point down the lane and the ball goes there. The dashed line is the line it
 will take, and the green ring on it is the arrow it crosses — which is the
 board a bowler would actually call out loud.

 Then pull back and let go. One movement, the way a cue works on the pool
 table, and it is what the game starts on. There are sweeping-line modes in
 the Aim menu for anyone who wants the arcade version instead.

 **Arcade #2** is the one that does not stop. The line does not sweep there:
 it *wanders* across the lane on two sines of unrelated speed, and it never
 locks. Hold and drag upwards to wind the pace up, and the board 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 board you wanted walks out from under it. 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 roll harder
 is how a cue works, and a cue is drawn back; an arm that rolls a ball down
 a lane swings forward. When the wind-up happens while the line is moving,
 the hand going the same way as the ball is the one you do not have to think
 about.

 Only one line, not two. Bowling has one thing to aim — where across the
 lane — and the second question the other games in this set ask, how far, is
 answered by the pace instead. A second sweeping line would be a gauge for a
 decision nobody has to make.


-------------------------------------------------------------------------------
 THE PACE IS A CHOICE
-------------------------------------------------------------------------------

 The green band on the bar is the pace that carries best. It is marked and
 not enforced, because pace is a real decision:

     slower   the ball has longer to bend, so more hook
     faster   it bends less, and hits harder

 That trade is in the arithmetic rather than bolted on: how far a lean moves
 the ball is divided by how fast it is going, because a sideways push does
 more to a path the longer the ball is under it, and that is the length of
 the lane over the pace.


-------------------------------------------------------------------------------
 THE HOOK IS YOURS
-------------------------------------------------------------------------------

 Move the mouse left or right while the ball is rolling and it curves that
 way. Arrow keys do the same. That is the whole of the hook.

 It belongs to you rather than to the ball, deliberately. A hook built into
 the ball would mean the line you were shown was never the line you got, and
 a targeter that says where the ball is going has to be telling the truth or
 it is decoration. Keep your hands still and the ball arrives exactly where
 the line said; every inch of bend after that is something you did.


-------------------------------------------------------------------------------
 THE PINS
-------------------------------------------------------------------------------

 This is the part that had to be right, because the whole game is what the
 pins do to each other.

 A pin has a body, not a footprint. It is fifteen inches of wood standing on
 a two inch foot, and every interesting thing that happens on a lane happens
 because of that: it topples about its base, its head travels further and
 faster than its foot, and what it takes out on the way down is whatever its
 head reaches.

 So each one carries a tilt — how far over it is, and which way it is going
 — and its body is the line from its foot to its head. Everything that
 touches a pin touches that line. The ball against a pin is a sphere against
 that segment; a pin against a pin is one segment against another, walked
 rather than solved because the closed form has half a dozen degenerate
 cases and each one is a way to divide by nothing on a frame nobody is
 watching.

 Where the ball strikes matters as much as that it strikes. A hit low drives
 a pin along the deck; the same hit high takes the head out from under it
 and the pin goes over — so how far up the pin the contact happened is
 worked out and used, because that is the difference between a pin that
 slides into its neighbour and one that topples across two of them.

 Once a pin is leaning, gravity finishes the job. A falling pin is an
 inverted pendulum: the further over it is the faster it goes over, which is
 why a clipped pin hesitates and then drops rather than easing to the floor.
 Past forty-five degrees it is going over and nothing is bringing it back,
 which is the honest place to call it down.

 They were circles that slid, once. Ten pins would shove each other about
 the deck like curling stones and the drawing flattened them where they
 stood, which is the single most obvious way for a game to say "this is a
 picture".

 Two numbers decide whether any of that feels like bowling: how much of the
 ball's pace a pin takes, and how slick the deck is. Left light, every pin
 the ball touched slid off the back whatever speed it arrived at, and a ten
 mile an hour ball knocked down exactly what a twenty did — which is not
 bowling. Thirty-two pairs were tried. At the pair in there now, a slow ball
 tops out at nine and a fast one carries, which is the difference everybody
 who has ever bowled knows about.

 And the strike is not down the middle. A ball straight at the head pin
 leaves six or seven standing here, the same as it does on a real lane; the
 pocket is about three inches either side of centre. Nobody put that in — it
 falls out of the pins being where pins are.


-------------------------------------------------------------------------------
 THE NOISE IT MAKES
-------------------------------------------------------------------------------

 There is not a recording anywhere in the program, for the same reason there
 is not a photograph. Five sounds, worked out rather than sampled.

 The ball down the boards is low, rough and long, because sixteen pounds of
 resin on maple is the loudest thing in the building and the least like a
 tone. The channel is hollower and higher — a gutter is a trough and rings
 where boards do not, and it is the sound of a ball that has already failed.

 The crash is the biggest noise the game has and the one worth getting
 right, because it is the sound anybody who has been to an alley knows. It
 is four things at once: a few milliseconds of hard broadband for the
 strike itself; the boom of the deck and the pit under it, low and slow to
 die, which is the part you feel; the wood of the pins in the middle; and
 forty small knocks over the following second and a quarter, laid out so
 they crowd into the first quarter — because ten pins do not fall at once
 and the deck is loudest at the start.

 And then the whole of it is put in the room, which is the part that was
 missing and was the whole of what was missing. An alley is a long hard shed
 — boards, block, a ceiling a long way up, nothing soft anywhere — and the
 crash of a ball into ten pins is mostly the building answering. Dry, the
 same partials sounded like a chair leg dropped in a cupboard. The room is
 four feedback combs and two allpass filters, Schroeder's arrangement from
 1962, with the comb delays deliberately not multiples of each other:
 delays that divide into one another line their echoes up and the result
 rings on a note instead of decaying into noise. The crash now stays above
 a tenth of its peak for 1.24 seconds where it used to be finished in 0.4.

 The pins and the ball are in the same room, more faintly. Without that the
 clacks sit in front of the crash rather than inside it, which is the
 giveaway that they were made separately. A pin against a pin is short, hollow
 and quite high, because a pin is a turned shell rather than a block — and
 ten of them going over is that sound a dozen times in half a second, which
 is what a strike actually sounds like. Nothing is scheduled to make it
 happen: it falls out of the pins hitting each other.

 How loud each one is comes from how hard the thing arrived, so a ball that
 trickles into the pocket and one that comes in at speed are not the same
 noise, and a pin clipped on the way past is not the same as one driven
 across the deck.

 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 five noises. 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. The pipe is set to four kilobytes, one page and the smallest a pipe
 can be: left at the default sixty-four it holds a second and a half of
 audio, and every sound would arrive a second and a half after the thing
 that made it.

 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. And it tells the truth — on a machine
 with no sound server it says so in as many words and takes its own tick
 off, leaving the setting asking for sound, so the same copy elsewhere
 starts making a noise again without anybody having to remember why it
 stopped.


-------------------------------------------------------------------------------
 THE SCORING
-------------------------------------------------------------------------------

 Ten frames, done properly: a strike is ten and the next two balls, a spare
 is ten and the next one, and the tenth gives you the extra balls to finish
 those with. Checked against the cases that catch programs out — twelve
 strikes is 300, ten five-and-fives is 150, nine-and-miss ten times is 90,
 three strikes then nothing is 60.

     Ten pin           the game
     Nine pin no-tap   nine counts as a strike; the leagues really do
                       play it, and twelve nines is 279
     Best of three     three racks, only the best one counts


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

 One lamp, and everything shaded against it.

 The lane is thirty-nine boards drawn one at a time, each a shade different
 from its neighbour the way a real floor is, with the oil shining down the
 middle two thirds and fading before the pins. Boards rather than one brown
 rectangle because a lane *is* boards — it is what bowlers count in and what
 the arrows point at — and because the seams running away to a point are
 most of what makes a lane look as long as it is. The seven arrows sit
 further down the lane the further out they are, which is how they are laid.

 A pin is a turned profile — foot, waist, belly, neck, head — because that
 silhouette is what makes it recognisable from the other end of an alley.
 It is drawn along its own axis wherever that axis happens to point, rather
 than as an upright shape that gets shorter: one lying on the deck pointing
 away from you is a stubby oval, one lying across the lane is its full
 length side on, and one caught half over is somewhere between. The two red
 stripes travel with the body and turn with it rather than staying level.

 The ball takes a long smear of the lights above the lane rather than one
 round dot, which is the thing that says polished, and its three finger
 holes turn with it — the only way to show a bowling ball rolling instead of
 sliding.

 Behind the pins the pit is dark with a strip of light under the masking
 unit, which is what you see at the end of a real lane.

 The lane is thirty feet, not sixty. A real one is sixty, and at sixty the
 pins are ten white specks at the vanishing point in any view that also
 shows where you are standing — and the pins are the game. Halved, the whole
 machine reads.

 The hook is scaled to suit, which is the part that would have gone wrong
 quietly. The bend is the lean times the time under it, and the time is the
 length over the pace — so on a lane half as long the same lean bends the
 ball half as far. The rates are quoted for a sixty foot lane and scaled to
 whatever lane they are used on, so a full hook still bends it the same
 twenty-six inches at every pace.

 The view still sits up the lane rather than at the foul line, and that was
 measured again rather than assumed. Fit all thirty feet into the window and
 the pins are 3.6 pixels across; at the crop it uses they are 23. Twenty-two
 feet gives 6.6, eighteen gives 13.5.


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

 Three views: from above, raked, and free 3D, all one camera.

 Hold the right button in Free 3D and drag, and the lane turns under you.
 Dragging takes hold of the lane rather than of the camera — pull the near
 end downwards and it tips towards you, so you end up looking from higher
 up; pull it up and you drop towards the boards. Sideways swings it round
 the pins. The wheel goes closer and further away.

 Doing it in either of the other two quietly switches to Free 3D rather than
 doing nothing, because somebody dragging with the right button is asking to
 look around and the honest answer is to let them. The plan is the one view
 that never turns: it is the only one where the line to the pocket is a line
 rather than a vanishing point, and it stops being that the moment it can be
 nudged off square.

 The eye can be dragged from four degrees above the boards to eighty-four.
 Not to deck level, where the pins are edge-on and stand in front of each
 other — a view of one pin; and not to straight down, where the arithmetic
 for which way is up stops having an answer.
 A machine opponent at easy, fair or hard, bowling alternate frames.
 Maple, oak or walnut.
 Tickets, a prize wall, and best games kept with the date.

 Settings live in ~/.config/bowling/bowling.save.


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

     Space      hold and release to roll
     S          sound on or off
     ← →        hook the ball while it is rolling
     1 2 3      from above, raked, free 3D
     right drag turn the lane round, in Free 3D
     Ctrl+N     another game
     wheel      closer and further away
     F1         how to play
     Esc        out


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

     chmod +x Bowling.AppImage
     ./Bowling.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:

     ./Bowling.AppImage --game nofuss
     ./Bowling.AppImage --version

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