Bit-packing across nine files no longer trips a stricter code checker (GHUB-0182)
Housekeeping with no change to how anything plays: a newer version of
one of the code checkers flagged the way saved games and card art pack
values into single numbers. Nothing was wrong with the results; the
code now says what it means clearly enough that the stricter checker
agrees.
The large-play switch no longer hides behind the toolbar's overflow arrow (GHUB-0184)
The sound and large-play switches now sit at the left of the toolbar,
ahead of whatever the game you are in adds. A toolbar with too much in
it hides whatever is furthest right, and these two were furthest right
-- so in Canasta, which has the most buttons, the large-play switch was
the first thing to disappear on a narrower window.
A game's end-of-game box can no longer open over a game you have already left (GHUB-0179)
Nine games posted their congratulation or game-over dialog on a short
delay. A posted single-shot cannot be cancelled, so leaving the page
inside that delay opened the box over whichever game the hub moved to.
Delayed announcements now run through GameView::announceLater(), which
drops the announcement if the hub has left.
Piling cards onto one column in Klondike or Spider no longer pushes the bottom of it off the screen. (GHUB-0089)
The cards are sized for the board you are dealt, and a column you build
up in play can grow longer than that. Rather than making every card
smaller on every deal, an over-long column now packs its own cards
closer together. FreeCell already did this; the other two now match.
Coming back to a 2048 game you had not scored in yet, then leaving, threw it away. (GHUB-0177)
The same fault six other games had fixed a few days earlier. 2048 was
missed because it also asks whether you have scored, and the score only
moves when two tiles join -- so an early game where you have only slid
looked to it like a game nobody had started.
Notes for developers that described how the project used to work. (GHUB-0145)
The chess engine has not run on the drawing thread since it was moved to a
background one, but two comments still said so, and both used it to justify
a limit on how hard the computer thinks. The build spec also described the
release checks incompletely enough that copying them would have reproduced
a bug they exist to catch. Nothing a player sees changes.
Everything the third code analyser could see is now dealt with, and it is switched on for good. (GHUB-0170)
Two of them mattered to a saved game: Canasta accepted a corrupted card
after having decided to reject it, and taking a move back in Draughts or
Reversi read a value nobody had set. The rest were tidying that makes the
next real problem easier to spot. Draughts also stops copying the whole
board at every step while it looks for a jump.
Small defects across card drawing, sound, the donation prompt and the checking scripts. (GHUB-0162)
Card faces could be drawn from the wrong cache entry on a screen set to
a fractional scale such as 150%. Both card caches now have a memory
ceiling rather than only an entry count, and are emptied before the
application shuts down. A sound that will not load now says so instead
of playing silence, the donation prompt is no longer skipped when
--game names a game that does not exist, and the three checking scripts
no longer accept spellings of the source they cannot actually read.
Taking back the move that reached 2048 takes the win back with it. (GHUB-0160)
The game went on believing the target had been reached, on a board with no
2048 tile on it.
Restarting a solved Sudoku puts the clock back on. (GHUB-0160)
The clock had been stopped when the puzzle was solved and Restart never
started it again, so it sat at zero while the board played on.
Delete in Sudoku's pencil mode now clears that cell's marks. (GHUB-0160)
It did nothing at all, while still making the sound of something happening.
Sudoku remembers the difficulty you chose. (GHUB-0160)
Minesweeper already did. Sudoku started every session on Easy whatever you
had been playing.
Taking back a Draughts move no longer leaves the gold marker on it. (GHUB-0160)
Undo restored the board but left the highlight pointing at a move that had
just been taken back.
Putting a FreeCell run back where it came from no longer costs you a move. (GHUB-0160)
Moves are the score in FreeCell, so picking a run up and setting it
straight back down was spending it for nothing.
Hearts no longer plays a card sound when no card was played. (GHUB-0160)
A computer play that the rules refused still made the noise, so the table
sounded as though it had moved when it had not.
A tied game of Hearts is no longer announced as your win. (GHUB-0160)
Finishing level with a computer player was reported as "You win!" and
written into your best scores. It now says who tied and on what, and
records nothing.
A Spider column that has taken every dealt row now stays on the table. (GHUB-0160)
Cards were sized for a shorter column than the game actually deals, so a
full one ran off the bottom and under the caption.
Clicking the bottom of Spider's last column no longer deals a row. (GHUB-0160)
The stock sits over that column's tail and was being tested first.
Double-clicking a buried Solitaire card no longer plays a different card. (GHUB-0160)
It sent the top of that column instead, which is a move you did not ask
for. A click that does not land on the top card now does nothing.
Solitaire and Spider no longer lock up if you leave mid-drag. (GHUB-0160)
A run picked up and not put down had been lifted off its pile. Leaving
the game, dealing again or undoing left those cards nowhere, and no card
could be picked up afterwards.
A crash no longer loses the game you were in, and two copies of the app stop overwriting each other. (GHUB-0067)
Progress reached the disk only on the way out, so a crash, a kill or a
power cut lost the one game being played -- and two copies settled by
whichever exited last rather than whichever moved last. The open game and
its window size are now banked on a one-second tick, so at most a second
of play is at risk and the most recent move wins.
A frozen Canasta pack keeps showing its sideways card however deep it is buried. (GHUB-0172)
The pile draws only its top few cards, so the card lying across it
vanished once that many discards landed on top -- while the pack stayed
frozen. It is now laid at the deepest position still drawn, under the
stack, so its arm shows for as long as the freeze lasts.
A ball wedged beside a flipper no longer bounces there for ever. (GHUB-0173)
A slingshot was kicking from its back as readily as its face, so a ball
in the inlane was fired at the wall opposite and returned, endlessly. The
kick now fires on the playfield-facing side only, as a real sling's rubber
does, and gravity takes the ball down to the flipper.
Canasta AI: several judgement terms rest on figures that are not what they claim. (GHUB-0149)
The pack count follows the deck count, the run-it-dead judgement measures
both sides the same way, the pair-keeping open works on more than one hand
shape, and the freeze budget survives saving and reopening a game.
The legibility threshold check could never run on Windows, and reddened master. (GHUB-0171)
The check shelled out to a grep pipeline, which cmd.exe cannot run.
It is a Python scan now, so it behaves the same on both platforms.
The Hearts sentence no longer sits on top of the card you just played. (GHUB-0147)
With large play on, the plate carrying what the game is telling you
grew upward out of the gap it was given and covered your own card in
the trick. It now moves into the empty felt beside the trick when
that gap is too small, so the sentence is still there and the card is
still visible.
The score book's instructions now describe a setup that works. (GHUB-0143)
It said to open the page as a file, which cannot install the offline
shell or the home-screen icon -- both need the folder to be served.
It also now says to bump the cache name after an edit, and is honest
about which numbers the drift check compares.
Sharing the score book is safer to join and to leave. (GHUB-0141)
A shared book whose names arrived in an unexpected form could freeze
a watching phone. Sharing now checks a code is free before claiming
it, instead of possibly landing on a game already in progress.
Taking over scoring stands the previous scorer down rather than
leaving two. And a connection that fails says so instead of leaving
the button looking like it did nothing.
The score book's offline cache no longer swallows the live database traffic. (GHUB-0142)
On a network that will not carry a live connection, the database
falls back to ordinary web requests -- and those were being cached
and replayed for ever, so sharing stopped working on that phone with
no way back short of clearing its site data. Only the score book's
own files and the pinned Firebase library are cached now.
Draughts asks which way you meant to jump when two routes finish in the same place. (GHUB-0131)
Where a piece can reach one square by two different jump routes,
taking different men, the board used to play whichever it happened to
find first -- and drew the same dot twice, so nothing told you a
choice existed. That square is now ringed, and clicking it moves the
dots to the squares the two routes differ at so you can say which you
meant.
A Canasta hand-size change now applies at the next hand, as the game says. (GHUB-0150)
Changing the pack size, the jokers or the hand size mid-game waited
for a whole new game rather than the next hand, so correcting a house
rule meant abandoning the game you were in.
A Canasta take can no longer leave you with nothing you are allowed to do. (GHUB-0148)
Where the deal had turned a red three into the pack, taking it could
leave you on one card with no canasta -- unable to go out, and so
unable to throw your last card either. The turn simply could not be
finished. The same miscount could also let a side go out without the
canasta the rules require.
The game tiles tell a screen reader which game they open. (GHUB-0132)
Each tile paints a picture and carries no text, so a screen reader
found fourteen unnamed buttons on the first page of the app. They
now carry a name and a description, and show their blurb on hover.
The Support dialog no longer comes up microscopic on some systems. (GHUB-0134)
Where the system font size is set in pixels rather than points, the
dialog shrank its own text to about 2pt -- worst of all with large
play turned on, the setting meant to make it bigger. The web
addresses in it are also no longer greyed down.
Large play now makes Reversi's move dots bigger and brighter. (GHUB-0133)
They ignored the switch, and because the caption takes height off
the board they actually came out SMALLER with large play on -- on
the only marks that show where you may put a disc. Reversi also
keeps the "turn passes" sentence on screen until a disc is actually
played; it used to vanish after a third of a second, and a pass is
the one move that leaves the board looking unchanged.
Closing the window stops the game you were on. (GHUB-0164)
Every other way of leaving a game stopped its clock and closing the
window did not, so a pinball could still drain -- and take a score
with it -- after you had shut the app.
Canasta says why when you click a pack that has nothing in it. (GHUB-0164)
It did nothing at all, which reads as the board being stuck rather
than as a rule. The Lay Down button also stops keeping its highlight
after the pointer has left the window.
Canasta marks all four black threes as the finish they are. (GHUB-0164)
Laying all four together is the one way to finish without keeping a
card back to throw, and the hand never lit them up, so the move was
invisible unless you already knew it was there.
Opening one game no longer stops every other game's window being made small. (GHUB-0135)
Canasta needs a wide window, and once you had opened it no other
game's window could be shrunk back down for the rest of the session
-- and the enlarged size was then remembered. Only the game you are
looking at decides how small the window can be.
A mistyped option prints an error and exits instead of opening a dialog on Windows. (GHUB-0158)
--help and any bad option went through Qt's own reporting, which on
Windows is a message box -- so the app waited for someone to close
a dialog rather than exiting. --size is also bounded now, instead of
attempting an enormous image for a silly number.
Taking a screenshot no longer changes your settings. (GHUB-0136)
--shot wrote the large-play setting and the remembered window size
as a side effect of photographing a game, so answering a question
about the app changed what you had chosen. It now stores nothing.
The toolbar's large-play button follows the switch however it was moved. (GHUB-0157)
Turning large play on any other way -- the --legible option does it
before the window exists -- left the button reading "Normal" and
unchecked, next to large play plainly on.
The app says so when it cannot save your settings. (GHUB-0156)
A full disk or a read-only settings folder lost every saved game and
remembered window size in silence. The status line now says once
that games and window sizes will not be remembered. A window size
that cannot be read also falls back to the normal opening size
rather than leaving the window unsized.
A damaged best score no longer locks you out of ever beating it. (GHUB-0156)
A stored best that was not a number read back as zero. In the games
where smaller is better -- Minesweeper and Sudoku times, Spider and
FreeCell moves, the Hearts total -- zero is a score nobody can beat,
so every later result was refused. It now reads as no record at all,
and the next result simply sets it.
The score book's A+ and A- now scale the numbers, not just the buttons.
Every size on the page is relative to the root, which the control
was not changing -- so the running total, the deal and the opening
minimum stayed fixed. Joining a shared game also no longer discards
the book already on the phone.
2048 and Snake update the on-board caption when a move is refused or the game is paused.
Snake keeps the second tap when you take a corner quickly.
Pinball's flippers keep time, and the backglass stops covering the table.
The flippers were advanced once per frame but measured per physics
step, so an identical swing gave a different kick depending on the
timing, and a ball resting near the tip could be knocked through the
blade toward the drain. The score strip sat over the top of the
playfield, and large play made it cover more.
Sudoku's Pencil and Show Errors buttons agree with the puzzle they are above.
After resuming they displayed the opposite of what was in force, so
the first press appeared to do nothing.
The mute switch is remembered between sessions.
Hearts stops covering the card you just played, and Close no longer ends the match.
The caption plate could sit over your own trick card at wide, short
windows. Declining the hand-over box left the match unplayable, and
it survived a restart; there is a Next Hand button now.
Canasta remembers both of its remaining house rules, and its difficulty.
The freeze-card T and stacking canastas were lost on every resume
while the toolbar still said House, and the chosen difficulty was
never stored at all. Resuming also dropped the Expert-partner
setting.
Pyramid's stock and waste no longer cover the bottom row.
They were drawn over the only row a fresh deal exposes, and a click
in the overlap dealt from the stock instead of taking the card.
Resuming a saved game and leaving it no longer deletes it.
Klondike, Spider, FreeCell, Pyramid, Reversi and Draughts read a
just-restored game as untouched and cleared the stored one, so
opening a save and pressing Back lost it.
The computer no longer plays your move.
In Chess, Reversi and Draughts a search scheduled just before New
Game, Undo or a level change could still fire and play a move for
you -- after which the board sat waiting for a side that would never
move. Reversi could also declare the game over twice and count the
win twice.