card-games-net.el calls string-empty-p, which lives in subr-x before Emacs 29; without the require a fresh Emacs 27 reported a void function in every networked test. The SVG smoke and region tests now skip when the Emacs has no SVG support, so the suite reads 145 expected, 20 skipped there instead of 25 failures. * card-games-net.el: Require subr-x. * test/card-games-tests.el: Skip the SVG tests unless SVG is available. * NEWS: Note both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U2Fb1SzFi8UuJdUm96qx83
165 lines
8.9 KiB
Text
165 lines
8.9 KiB
Text
card-games NEWS -- user-visible changes
|
|
========================================
|
|
|
|
* Version 1.0.92 (pretest3: MELPA review)
|
|
|
|
** Packaging and internals
|
|
- card-games-net requires subr-x. It calls ~string-empty-p~, which
|
|
lives in subr-x before Emacs 29, so a fresh Emacs 27 failed every
|
|
networked test with a void function; the header promises 26.1.
|
|
- The SVG smoke and region tests skip, rather than fail, in an Emacs
|
|
built without SVG support. An Emacs with SVG runs them as before.
|
|
- The networked 500 client no longer patches game commands with
|
|
advice. Player commands submit their action through the new
|
|
~card-games-bid-submit~ generic; a joining Emacs plays a
|
|
~card-games-bid-client-game~, whose method forwards each intent to
|
|
the host. Behaviour is unchanged, and the client now shares the
|
|
solo game's turn and legality checks exactly.
|
|
- The host broadcasts from the new ~card-games-bid-after-refresh-hook~
|
|
instead of advising the refresh loop, and prompts that cannot reach
|
|
a remote player are suppressed with ~card-games-bid-inhibit-prompts~.
|
|
- The lobby start key ~s~ is defined in ~card-games-bid-mode-map~
|
|
itself rather than pushed in when the network layer loads.
|
|
- Byte-compile and checkdoc are warning-clean across the package
|
|
(docstring widths, ambiguous doc references, ~derived-mode-p~, a
|
|
sharp-quoted ~defalias~, and ~require~'s NOERROR argument), from
|
|
MELPA review feedback (thanks riscy).
|
|
|
|
* Version 1.0.91 (pretest2: playtest)
|
|
|
|
** Documentation
|
|
- A complete Info manual now ships with the package: ~C-h i~ and choose
|
|
*Card Games* (or ~M-x info RET (card-games) RET~). It is built with
|
|
makeinfo (~make info~); ~make info-emacs~ builds it with Emacs alone
|
|
for environments without a texinfo installation.
|
|
- The README is generated from ~README.org~ to ~README.md~ with Emacs
|
|
batch (~ox-md~), so GitHub and MELPA render it faithfully; a
|
|
~pre-commit~ hook (~make hooks~) keeps ~README.md~ in step. Added
|
|
board screenshots and refreshed the game list and customization notes.
|
|
|
|
* Version 1.0.90 (pre-test snapshot)
|
|
|
|
This release grows the package from the five-game 1.0.60 candidate to a
|
|
full collection of 30 games, all of which now draw SVG card faces on a
|
|
graphical display (with a plain-text fallback in the terminal) and accept
|
|
the mouse as well as the keyboard.
|
|
|
|
** New games (since 1.0.60)
|
|
- Solitaire: Klondike, FreeCell, Spider, Yukon, Forty Thieves,
|
|
Scorpion, Canfield, Russian Bank; Golf, TriPeaks, Pyramid.
|
|
- Trick-taking: Hearts, Spades, Whist, Oh Hell, Euchre, Pitch,
|
|
Briscola, and Contract Bridge (auction, dummy, rubber scoring).
|
|
- Rummy family: Gin Rummy, Rummy, Rummy 500, Hand & Foot.
|
|
- Matching: Go Fish, Old Maid.
|
|
- Shedding and climbing: Crazy Eights, President.
|
|
- Two-player: Russian Bank / Crapette, played against the computer --
|
|
foundations, shared houses, loading cards onto your opponent, the
|
|
"stop" rule that ends your turn if you skip a foundation play
|
|
(toggle with ~cg-crapette-stops~), and sequenced house-to-house
|
|
moves limited by the number of empty houses -- with ~[~ and ~]~ to
|
|
choose how many cards of a run to drop onto an empty house. On a
|
|
graphical display it draws an SVG board (houses shown as stacks) that
|
|
you can click to pick up and drop, with ~+~ / ~-~ / ~0~ to zoom;
|
|
set ~cg-crapette-svg-cards~ to nil for the plain-text board.
|
|
- Pegging: Cribbage. Capturing: Scopa, Casino. Spite & Malice.
|
|
(These join Gaps/Montana, Hell's Half-Acre, and 500 from 1.0.60.)
|
|
|
|
** Graphics and input
|
|
- SVG card faces for every game, behind per-game ~cg-*-svg-cards~
|
|
toggles, with a plain-text fallback off a graphical display.
|
|
- Mouse support everywhere: click cards to select or play, click board
|
|
slots and buttons, and use an on-screen card-size slider plus the
|
|
~+~ / ~-~ / ~0~ zoom keys.
|
|
- Full SVG table for the trick-taking games (Hearts, Spades, Whist,
|
|
Oh Hell, Euchre, Pitch, Briscola): the three opponents, the trick in
|
|
the middle, and your fanned hand, with the legal cards you may play
|
|
ringed. Click a card to play it. Set ~cg-trick-svg-cards~ to nil
|
|
for the plain-text board.
|
|
- The Emacs emblem in the full-window (SVG) UIs is now switchable via
|
|
~cg-svg-emacs-logo~: it embeds a real logo that ships with Emacs --
|
|
the modern icon (default), the classic icon, a GNU head, or the
|
|
splash image -- or the small built-in drawn emblem, or none.
|
|
- More card backs, and a random default. ~cg-svg-card-back~ now offers
|
|
~dots~, ~rings~, ~solid~, ~lattice~, ~waves~, ~diamond~, and four
|
|
backs stamped with an Emacs logo (~emacs~, ~emacs-classic~, ~gnu~,
|
|
~splash~). It defaults to ~random~, which picks a back for the
|
|
session; ~M-x cg-svg-shuffle-card-back~ (or reopening the game menu)
|
|
rolls a new one.
|
|
- Full SVG board for the rummy games (Gin Rummy, Rummy, Rummy 500):
|
|
the stock and discard, the melds already down on the table, and your
|
|
fanned hand with cursor, marks, and lay-off hints; click a card to
|
|
select it. Honours ~cg-rummy-svg-cards~.
|
|
- The same board now covers Hand & Foot (each team's books, and your
|
|
hand or foot) and the fishing games Scopa and Casino (the loose
|
|
table cards and the deck).
|
|
- SVG boards for Crazy Eights (the discard, the suit in play, and the
|
|
stock), Spite & Malice (the four centre piles, your goal and discard
|
|
piles), and Old Maid (the opponents and your hand; click one of the
|
|
next player's face-down cards to draw it).
|
|
- SVG boards for Cribbage (a peg-track for each player, the starter, the
|
|
pegging count and cards, and the crib at the show) and Bridge (the
|
|
rubber and contract, all four seats with the dummy exposed, the trick
|
|
in the middle, and the hand you are playing). With these every game
|
|
in the collection now has a full graphical board.
|
|
|
|
** Rummy-family rules completed
|
|
- Rummy 500: take a card from anywhere in the discard pile (key ~T~) --
|
|
you take it plus every card above it, and meld the chosen card at once.
|
|
- Hand & Foot: pick up the discard pile (~p~) by melding its top card
|
|
with two natural cards; red threes score as bonus cards; and each
|
|
round opens with a rising go-down minimum (50, 90, 120, 150).
|
|
|
|
** 500 full-SVG UI
|
|
- The kitty exchange is fully mouse-driven: a Discard button, a five-card
|
|
selection cap, an on-table guidance banner, legal-play dimming during
|
|
play, and a clickable ~? Help / Rules~ overlay.
|
|
- A card-size slider scales the South hand; layout fixes to the
|
|
"Next hand" button and the hand fan.
|
|
- Live multiplayer 500 over TCP (~M-x cg-bid-host~ / ~M-x cg-bid-join~).
|
|
|
|
** Pick how the games are drawn
|
|
- From the ~M-x card-game~ menu (or ~M-x card-games-set-treatment~) you
|
|
can switch all the games between ~text~ (UNICODE cards), ~svg~ (drawn
|
|
cards), and ~full~ (the full-window SVG table where a game has one,
|
|
Gaps and 500).
|
|
|
|
** Adjustable computer opponents
|
|
- A new ~cg-ai-level~ (easy, normal, hard) sets how hard the computer
|
|
plays, and you can change it right from the ~M-x card-game~ menu (or
|
|
with ~M-x card-games-set-ai-level~). Russian Bank (Crapette) plays
|
|
all three levels; the trick-taking games play a random legal card on
|
|
easy. Other games ignore it for now.
|
|
|
|
** A craftier Russian Bank (Crapette) opponent
|
|
- On normal and hard the computer empties its reserve first (the pile
|
|
you must clear to win) and prefers loading its cards onto you; on hard
|
|
it also looks a move ahead to rearrange the houses when doing so frees
|
|
a card it could not otherwise place. Easy keeps the old simple play.
|
|
|
|
** Bug fixes
|
|
- Alternating-colour building (the tableau solitaires and Russian Bank)
|
|
wrongly treated a diamond and a heart as opposite colours, so a red
|
|
card could be built on another red card. Both are red; fixed.
|
|
|
|
** Playtest fixes
|
|
- ~q~ now returns to the ~M-x card-game~ menu from any game, instead of
|
|
burying the buffer and leaving the previous buffer on screen.
|
|
- The cursor/selection ring no longer borrows the theme's ~region~
|
|
colour, which on some themes drew an alarming ring around the board;
|
|
it is now the intended gold (customize ~cg-svg-highlight-color~).
|
|
- Go Fish shows an "Ask for:" row of clickable rank buttons, so you
|
|
choose a rank to ask for without hunting for one card in a large,
|
|
overlapped hand.
|
|
- The tableau solitaires (Klondike, FreeCell, Canfield, and the rest)
|
|
and Go Fish now show a one-line control legend, so a new deal (~n~),
|
|
undo, help, and the menu are visible rather than hidden behind a key.
|
|
- Hell's Half-Acre / Gaps: clearer prompt pointing at the green ~+~
|
|
gaps to fill, and a ~q menu~ button on the control line.
|
|
|
|
* Version 1.0.60
|
|
- First multi-game release candidate: Montana/Gaps, Hell's Half-Acre,
|
|
500 (with live multiplayer). SVG rendering foundation and the
|
|
renderer-strategy registry.
|
|
|
|
* Version 1.0.50
|
|
- Initial ELPA-suitable packaging of the engine, Gaps, and 500.
|