funman300 3f922ede28
CI / Test & Lint (push) Failing after 21s
CI / Release Build (push) Has been skipped
feat(engine): convert ConfirmNewGameScreen to real-button modal
Phase 3 step 4a of the UX overhaul. Closes the player's #2 smoke-test
complaint head-on: the abandon-current-game prompt previously rendered
"Yes (Y)" and "No (N)" as plain `Text` entities — not real `Button`s.
Clicks did nothing, hover/press feedback was absent, and the only path
through the modal was the keyboard.

Replace the bespoke 60-line spawn function with a 30-line call to the
ui_modal primitive:

- spawn_modal(ConfirmNewGameScreen, Z_MODAL_PANEL, ...) — uniform
  scrim + centred card with header / body / actions slots.
- Header: "Abandon current game?" (TYPE_HEADLINE, TEXT_PRIMARY).
- Body: "Your progress will be lost." (TYPE_BODY_LG, TEXT_SECONDARY).
- Actions row:
    Cancel (Secondary variant, hotkey "Esc") — left
    Yes, abandon (Primary yellow CTA, hotkey "Y") — right

The ConfirmNewGameScreen marker rides on the scrim entity per
ui_modal's contract; OriginalNewGameRequest is attached to the same
entity after spawn so handle_confirm_input / handle_confirm_button_input
can read it.

A new handle_confirm_button_input system mirrors the keyboard handler
for clicks: it queries `Changed<Interaction>` on `ConfirmYesButton` /
`ConfirmNoButton` and dispatches the same despawn + new-game-fire
logic. Keyboard accelerators (Y/Enter, N/Esc) still work; both paths
reach the same code through the existing `confirmed: true` flag on
NewGameRequestEvent (62cd1cf).

UiModalPlugin's paint_modal_buttons system (8da62bd) handles
hover/press recolouring automatically; no per-modal paint logic
needed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 00:51:28 +00:00
2026-04-28 13:48:41 -07:00
2026-04-29 21:59:38 +00:00

Solitaire Quest

A cross-platform Klondike Solitaire game written in Rust, featuring a full progression system with XP, levels, achievements, daily challenges, and optional self-hosted sync so your stats follow you across machines.

Features

  • Klondike Solitaire — Draw One and Draw Three modes
  • Progression — XP, levels, unlockable card backs and backgrounds
  • 18 Achievements — including secret ones
  • Daily Challenge — server-seeded so every player worldwide gets the same deal
  • Leaderboard — opt-in, powered by your own self-hosted server
  • Special Modes (unlocked at level 5): Zen, Time Attack, Challenge
  • Sync — pull/push stats across devices via a self-hosted server
  • Color-blind mode — blue tint on red-suit cards

Building

Prerequisites

  • Rust stable toolchain (rustup install stable)
  • Linux: libasound2-dev libudev-dev libxkbcommon-dev
  • macOS: Xcode Command Line Tools
# Fast development build
cargo run -p solitaire_app --features bevy/dynamic_linking

# Release build
cargo build -p solitaire_app --release
./target/release/solitaire_app

Controls

Key Action
Left click / drag Move cards
Right click Highlight legal moves for a card
Space / D Draw from stock
Z / Ctrl+Z Undo
N New game
S Stats overlay
A Achievements overlay
P Profile overlay
O Settings
L Leaderboard
H Help / controls
Enter Auto-complete (when badge is lit)
Escape Pause / clear selection
Arrow keys Navigate card selection

Sync Server (optional)

To sync stats across machines, run the self-hosted server. See README_SERVER.md for setup instructions.

Once the server is running, open Settings → Sync Backend, enter the server URL and your username, and register an account from within the game.

Running Tests

# All tests
cargo test --workspace

# Just game logic (no display required)
cargo test -p solitaire_core -p solitaire_sync -p solitaire_data -p solitaire_server

# Lint
cargo clippy --workspace -- -D warnings

License

MIT — see LICENSE.

S
Description
A Klondike solitaire game built in Rust with Bevy, targeting Android and Linux desktop. Features classic card rendering, draw-one/draw-three modes, score tracking, undo/redo, daily challenges, and auto-complete detection.
https://klondike.aleshym.co/
Readme MIT 45 MiB
v0.39.0 Latest
2026-05-19 23:58:42 +00:00
Languages
Rust 95.7%
JavaScript 1.9%
HTML 1.3%
CSS 0.5%
Shell 0.4%
Other 0.2%