b98cb8a99f
Replaces the previous xCards-derived card faces (LGPL-3.0) with
hayeah/playing-cards-assets, which itself derives from the
public-domain vector-playing-cards Google Code project. The whole
package is MIT now — see CREDITS.md for the new attribution table
and the simpler license summary.
solitaire_engine/assets/themes/default/
52 face SVGs (clubs/diamonds/hearts/spades × ace/2-10/jack/queen/
king) — copied from hayeah, renamed to the canonical
`{suit}_{rank}.svg` form `CardKey::manifest_name` produces. The
bundled default theme manifest references each by the same name.
back.svg — original midnight-purple-themed card back, hand-written
to match the project's design tokens (BG_BASE / BG_ELEVATED /
ACCENT_PRIMARY / ACCENT_SECONDARY). MIT, original work.
assets/cards/faces/{RANK}{SUIT}.png
52 PNGs regenerated from the new SVGs at 750-tall via resvg 0.47.
These remain the legacy backwards-compat path that
`card_plugin::load_card_images` reads at startup; once the runtime
theme system finishes loading the embedded default theme, the
CardImageSet's face handles are overwritten with the SVG-rendered
variants and these PNGs become moot. Keeping them in place avoids
a brief blank-card flash before the async theme load completes.
solitaire_engine/src/assets/sources.rs
embed_default_svg!() macro + DEFAULT_THEME_SVGS table that bundles
every face + the back into the binary at compile time via
include_bytes!. populate_embedded_default_theme now iterates the
table so the EmbeddedAssetRegistry is populated under the same
asset paths the manifest references.
CREDITS.md
License summary collapses from MIT + LGPL-3.0 + OFL-1.1 to MIT +
OFL-1.1 (the OFL still applies to FiraMono). The hayeah upstream
URL replaces the previously-blank xCards entry.
cargo build / clippy --workspace --all-targets -- -D warnings / test
--workspace all green (960 passed, 0 failed, 9 ignored).
113 lines
5.9 KiB
Markdown
113 lines
5.9 KiB
Markdown
# 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 LGPL and OFL notices remain
|
||
visible to end users.
|