Files
Ferrous-Solitaire/CREDITS.md
T
funman300 43f13c615e chore: workspace cleanup after card-theme phase landings
Drops dead deps and stale doc content carried over from the pre-MIT
art swap.

Cargo.toml manifests:
- solitaire_core no longer depends on chrono (no source references it
  since the original sync-payload timestamps moved to solitaire_data).
- solitaire_sync no longer depends on serde_json (the sync types use
  serde-derive with whatever serializer the caller picks; the old
  json-specific helpers were removed earlier).

Cargo.lock pruned by `cargo build` to drop the now-untransitively-
referenced versions.

CREDITS.md redistribution clause: "LGPL and OFL notices" tightened to
"MIT (project + hayeah card art) and OFL (FiraMono)" since the LGPL
art is gone.

SESSION_HANDOFF.md:
- HEAD bumped to 924a1e2; test count to 960; 9 ignored.
- Punch list rewritten — the xCards-URL line is obsolete (we did the
  swap), v0.1.0 tag exists locally, and player smoke-test is the
  current top item.
- New "Card-theme system (CARD_PLAN.md, fully shipped)" section
  summarises the seven-phase end-to-end flow so a future session has
  the integration map without re-reading the plan.
- Optional list gains the SVG-vs-layout aspect-ratio note as a
  cosmetic-only follow-up.

Removed the locked worktree at .claude/worktrees/agent-aa55a94d18c669d70
left behind by a prior Claude session.

cargo build / clippy --workspace --all-targets -- -D warnings / test
--workspace all green (960 passed, 0 failed, 9 ignored).
2026-05-01 16:41:53 +00:00

113 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Credits
Solitaire Quest is MIT-licensed (see [LICENSE](LICENSE)). It is built on top of
the work of many open-source projects and a small handful of third-party
assets. This file lists every component that ships in the binary or in the
`assets/` directory.
---
## Code & Framework
| Component | License | Role |
|---|---|---|
| [Bevy 0.18](https://bevyengine.org/) | MIT OR Apache-2.0 | Game engine, ECS, rendering, UI |
| [kira 0.12](https://crates.io/crates/kira) | MIT OR Apache-2.0 | Audio playback (mixer, sub-tracks, looping ambient) |
| [serde](https://crates.io/crates/serde) / [serde_json](https://crates.io/crates/serde_json) | MIT OR Apache-2.0 | Serialization for save files and the sync API |
| [tokio](https://crates.io/crates/tokio) | MIT | Async runtime for the sync client and server |
| [axum 0.8](https://crates.io/crates/axum) | MIT | HTTP framework for the self-hosted sync server |
| [sqlx 0.8](https://crates.io/crates/sqlx) | MIT OR Apache-2.0 | Compile-time-checked SQLite access on the server |
| [reqwest 0.13](https://crates.io/crates/reqwest) | MIT OR Apache-2.0 | HTTP client for the sync provider |
| [jsonwebtoken 10](https://crates.io/crates/jsonwebtoken) | MIT | JWT issuance and validation |
| [bcrypt 0.19](https://crates.io/crates/bcrypt) | MIT | Password hashing on the server |
| [keyring 4](https://crates.io/crates/keyring) | MIT OR Apache-2.0 | OS keychain integration for credential storage |
| [tower-governor 0.8](https://crates.io/crates/tower-governor) | MIT | Rate limiting on `/api/auth/*` |
| [chrono](https://crates.io/crates/chrono) | MIT OR Apache-2.0 | Date / time handling |
| [uuid](https://crates.io/crates/uuid) | MIT OR Apache-2.0 | User and session identifiers |
| [thiserror](https://crates.io/crates/thiserror) | MIT OR Apache-2.0 | Error type derive |
| [rand 0.9](https://crates.io/crates/rand) | MIT OR Apache-2.0 | Seeded shuffler in `solitaire_core` |
| [png 0.17](https://crates.io/crates/png) | MIT OR Apache-2.0 | PNG encoder used by `solitaire_assetgen` |
| [ab_glyph 0.2](https://crates.io/crates/ab_glyph) | Apache-2.0 | Glyph rasterization for generated card art |
The full transitive dependency tree (several hundred crates) is captured in
`Cargo.lock` and reachable via `cargo tree`. Every crate brought in is
MIT, Apache-2.0, BSD-style, or a dual-licensed combination thereof — no
copyleft code is statically linked into the game binary.
---
## Assets
### Card artwork
| File(s) | Source | License |
|---|---|---|
| `solitaire_engine/assets/themes/default/{suit}_{rank}.svg` (52 SVGs) | [hayeah/playing-cards-assets](https://github.com/hayeah/playing-cards-assets) | MIT |
| `solitaire_engine/assets/themes/default/back.svg` | Original — Solitaire Quest | MIT (this project) |
| `assets/cards/faces/{RANK}{SUIT}.png` (52 PNGs) | Pre-rendered from the same `playing-cards-assets` SVGs | MIT (passed through from hayeah) |
| `assets/cards/backs/back_0.png` `back_4.png` | Original — generated by `solitaire_assetgen::gen_art` | MIT (this project) |
The face SVGs come from Howard Yeh's `playing-cards-assets` repository, which
is itself derived from the public-domain `vector-playing-cards` Google Code
project. The art is redistributed under the MIT license — see the upstream
repository for the full notice. The files ship unmodified in the bundled
default theme; user-supplied themes can override them per-installation
through the runtime SVG theming system documented in `CARD_PLAN.md`.
The default card back is original work by this project, midnight-purple
themed to match the rest of the UI palette.
### Backgrounds
| File(s) | Source | License |
|---|---|---|
| `assets/backgrounds/bg_0.png` `bg_4.png` | Original — generated by `solitaire_assetgen::gen_art` | MIT (this project) |
### Typography
| File | Source | License |
|---|---|---|
| `assets/fonts/main.ttf` (FiraMono-Medium) | [mozilla/Fira](https://github.com/mozilla/Fira) | SIL Open Font License 1.1 |
The OFL permits redistribution and embedding in software so long as the font
file itself is not sold standalone. The file ships unmodified.
### Audio
All six WAV files in `assets/audio/` are **original work** — there are no
third-party audio samples in this project. They are synthesized
programmatically by `solitaire_assetgen/src/bin/gen_sfx.rs`, which writes
44.1 kHz mono 16-bit PCM WAVs using a hand-rolled WAV writer (no `hound` or
`dasp` dependency). The synthesis stack is entirely additive: sine /
square waves, layered harmonics, deterministic LCG noise, AR envelopes,
and a slow LFO for the ambient track.
| File | Synthesis approach |
|---|---|
| `card_deal.wav` | Filtered LCG noise with a sweeping low-pass cutoff for a "whoosh" |
| `card_flip.wav` | High-passed LCG noise under a fast AR envelope |
| `card_place.wav` | 120 Hz sine body + filtered noise click |
| `card_invalid.wav` | Two dissonant square tones (196 Hz + 207.65 Hz) beating against each other |
| `win_fanfare.wav` | C-major arpeggio (C5 / E5 / G5 / C6) with sine + 2nd harmonic |
| `ambient_loop.wav` | 55 Hz fundamental with 2nd and 3rd harmonics, modulated by a 0.2 Hz LFO; loop length is chosen so the tone and LFO both complete an integer number of cycles for seamless looping |
Audio files are MIT-licensed alongside the rest of this project.
---
## License Summary
- **Project code:** MIT — see [LICENSE](LICENSE).
- **Card face artwork (52 SVGs from hayeah/playing-cards-assets, plus the
pre-rendered PNGs in `assets/cards/faces/`):** MIT, redistributed
unmodified. The original `vector-playing-cards` line art is itself
public domain.
- **FiraMono-Medium font:** SIL Open Font License 1.1, redistributed unmodified.
- **All other assets** (backgrounds, the default `back.svg`, generated card
backs, every audio file) are original work covered by this project's MIT
license.
If you redistribute Solitaire Quest, you must ship this `CREDITS.md` and the
`LICENSE` file alongside the binary so the MIT (project + hayeah card art)
and OFL (FiraMono) notices remain visible to end users.