# Fool A mobile card game: *durak*, one player against a bot. Built with **Cocos Creator 3.8.8**, targeting Web, Android and iOS, portrait only. ## Getting around | | | |---|---| | What the game is | [docs/GAMEPLAY.md](docs/GAMEPLAY.md) — the rules, and the bot's policy | | How it is built | [docs/TECHNICAL.md](docs/TECHNICAL.md) — layers, folders, workflows | | What is planned | [docs/PLAN.md](docs/PLAN.md) — milestones and their state | | Why it is like that | [docs/DECISIONS.md](docs/DECISIONS.md) — choices the specs left open | | Driving the editor | [docs/CODE_MODE_SETUP.md](docs/CODE_MODE_SETUP.md) | ## Working on it ```bash npm install npm test # the rules, the bot and the save format, headless npm run typecheck # strict tsc over core/, modules/ and the tests npm run check:core-purity # fails if the game logic reaches for the engine npm run build:art # regenerate every sprite from source npm run stats:bot # BasicBot self-play distribution — a tool, not a test ``` `npm test` needs no editor and no device. That is deliberate: the rules live in a pure TypeScript core with no `cc` import, driven as a deterministic state machine, so the entire rule set is verifiable in a couple of seconds. The soak specs play several thousand complete matches and re-check every state invariant after every single action. To see it, open the project in Cocos Creator and press Preview, or build and serve it — see *Builds* in [docs/TECHNICAL.md](docs/TECHNICAL.md). ## Layout ``` assets/scripts/core/ the rules, the bot — no engine dependency assets/scripts/modules/ savegame assets/scripts/app/ bootstrap and services assets/scripts/ui/ scenes, screens, card rendering assets/resources/cards/ 36 faces + back, packed into one atlas art-src/cards/ vector sources for the faces tests/ vitest specs and the state invariant checker scripts/ art build and the architecture guard ``` ## Credits Card faces are from **Vector Playing Cards** by **Chris Aguilar**, LGPL-3.0. Attribution is required by that licence — see [assets/resources/cards/ATTRIBUTION.md](assets/resources/cards/ATTRIBUTION.md), which also explains what to change if that licence does not suit the release.