diff --git a/CLAUDE.md b/CLAUDE.md index d00e24e..c1cfd52 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,9 +1,9 @@ # Working on this repo (agent notes) -Pilgrims of Katan — an Android collection of card and board games, playable -against AI or over Wi-Fi (LAN). Bootstrapped from +ProLibertateGames — Wallacenet's build of an Android collection of card and +board games, playable against AI or over Wi-Fi (LAN). Upstream: [adrianoftyriel/ProLibertateGames](https://github.com/adrianoftyriel/ProLibertateGames) -(GPL-3.0, kept as the `upstream` remote) for Wallacenet. Canonical repo: +(GPL-3.0, kept as the `upstream` remote). Canonical repo: . ## Ground rules @@ -11,13 +11,15 @@ against AI or over Wi-Fi (LAN). Bootstrapped from - **Licences travel.** `LICENSE` is GPL-3.0 and must stay. The Uncial Antiqua font ships with its OFL licence at `docs/licenses/UncialAntiqua-OFL.txt`; never delete or edit either. Attribution to the upstream lives in the README. -- **No Catan trademarks or brand assets**, and none of the upstream's Wallace - clan branding (it was removed in the rebrand; see README → Branding). The - brand is: *Pilgrims of Katan*, `ca.wallacenet.pilgrimsofkatan` (+ `.dev`), - slate blue / dev green, hexagon emblem. +- **No Catan trademarks or brand assets** — the one hard line. The app's own + branding is the upstream's, restored (see README → Branding): tartan launcher + icon and splash, Wallace clan red on production and hunting green on dev, + launcher names *Pro Libertate Games* / *Pro Libertate Games DEV*. The + installed identity is `ca.wallacenet.pilgrimsofkatan` (+ `.dev`). - **The existing catalogue is the regression safety net.** Keep every game - green; new games (Catan) arrive as separate tasks, not edits to old ones. - All 22 games are `available = true`. + green; new games (Katan) arrive as separate tasks, not edits to old ones. + The 22 reference games are `available = true`; Katan is listed with + `available = false` (*Coming soon*) until its game task lands. - **Docs conventions**: every game gets `docs/RULES-.md` (index and gaps in `docs/README.md`); build/CI/release decisions go in `docs/CI.md`. Update the docs when behaviour changes — they are the check against the rules code. diff --git a/README.md b/README.md index 00767e6..451c55f 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,15 @@ -# Pilgrims of Katan +# ProLibertateGames A collection of card and board games for Android, playable against the computer or against other people over Wi-Fi (LAN). -Derived from [ProLibertateGames](https://github.com/adrianoftyriel/ProLibertateGames) -by adrianoftyriel, used under the GNU GPL v3 — see [LICENSE](LICENSE). Game -rules documentation lives under [docs/](docs/README.md); build, CI and release -decisions live in [docs/CI.md](docs/CI.md). Catan itself arrives in later work; -this app ships the reference catalogue unchanged as the regression safety net. +Wallacenet's build of [ProLibertateGames](https://github.com/adrianoftyriel/ProLibertateGames) +by adrianoftyriel (GNU GPL v3 — see [LICENSE](LICENSE)), hosted at +. Game rules documentation +lives under [docs/](docs/README.md); build, CI and release decisions live in +[docs/CI.md](docs/CI.md). Katan itself arrives in later work — it is listed under +Board Games as *Coming soon* — and this app ships the reference catalogue +unchanged as the regression safety net. ## What works today @@ -16,15 +18,15 @@ The app shell is complete and every game in the catalogue is playable end to end | | | | --- | --- | | **Cards** | Euchre, Kaiser, President, Golf, Wizard, Crazy 8s, Cribbage, Hearts, Klondike, FreeCell, Spider, Pyramid | -| **Table** | Sequence, Chess, Checkers, Backgammon, Mastermind, Nine Men's Morris, Peg Solitaire, Yahtzee, Pirates and Bulgars, Ta Yü | +| **Table** | Sequence, Chess, Checkers, Backgammon, Mastermind, Nine Men's Morris, Peg Solitaire, Yahtzee, Pirates and Bulgars, Ta Yü, Katan *(coming soon)* | -Nothing is marked *Coming soon* at the moment, because nothing is waiting. The -machinery for it is still there and still tested: a game listed in `GameCatalog` -with `available = false` appears in the menu marked *Coming soon* **on dev builds -only**, so a production release lists just what can actually be played and nobody -installs it and taps into a dead end. The menu decides this from the installed -APK's own version name — the same source the updater uses to know which channel -it is on. +One entry is marked *Coming soon*: Katan, the island game, whose engine and +screen land with their own task. The machinery is still there and still tested: +a game listed in `GameCatalog` with `available = false` appears in the menu +marked *Coming soon* **on dev builds only**, so a production release lists just +what can actually be played and nobody installs it and taps into a dead end. The +menu decides this from the installed APK's own version name — the same source +the updater uses to know which channel it is on. Adding a game means writing a `GameRules` implementation, a `GameAi` and a screen, then flipping `available` — the menu, lobby, networking, settings and OTA @@ -135,21 +137,21 @@ it: every rule above is a pure function and unit-tested on the JVM. ## Branding -Neutral, original, and deliberately *not* Catan's: no third-party marks or -trade dress ship in this app (rebrand scope: WALA-118). The launcher icon is a -hexagonal ring around a solid core — a game tile, not any game's logo — drawn -as vector drawables so it stays sharp at every density and needs no PNGs. The -app opens on the brand field fading to its deep shade, the name set in a Celtic -uncial hand for two seconds before it fades into the menu. +The app wears the upstream's own branding, restored (WALA-118 review): the +Wallace tartan is the launcher icon and the splash, drawn as vector drawables and +Compose code so it stays sharp at every density and needs no PNGs. The app opens +on the tartan held under the name, set in a Celtic uncial hand for two seconds +before it fades into the menu. -A dev build wears the **dev green** field where production wears **slate -blue**, and installs as *Pilgrims of Katan DEV*. That is what tells the two +A dev build wears the **hunting green** sett where production wears the **clan +red**, and installs as *Pro Libertate Games DEV*. That is what tells the two copies apart when both are on the phone; see -[Both channels on one device](#both-channels-on-one-device). The palette lives -in `ui/theme/Theme.kt` (`BrandField`, `BrandDeep`, `BrandAccent`) and the two -channel colours are generated per build by `resValue` in `app/build.gradle.kts` -— the icon vectors reference `@color/brand_field` rather than a literal, which -is how one set of vectors serves both colourways. +[Both channels on one device](#both-channels-on-one-device). The tartan is drawn +by `ui/theme/Tartan.kt` (`TartanBackground`, `threadWidthFor`) off +`BuildConfig.DEV_BUILD`; the matching vector colours are generated per build by +`resValue` in `app/build.gradle.kts` — the icon vectors reference +`@color/tartan_field` rather than a literal, which is how one set of vectors +serves both colourways. Two honest caveats: @@ -158,9 +160,10 @@ Two honest caveats: the SIL Open Font License 1.1. The full licence is at [docs/licenses/UncialAntiqua-OFL.txt](docs/licenses/UncialAntiqua-OFL.txt) and must stay with the font — the OFL requires it to be distributed alongside. -- **The upstream's clan tartan is gone; its code is not.** The Wallace tartan - was the upstream's brand and left with the rebrand. The GPL-licensed history - that produced this app remains in git, and the source stays at +- **Katan is the one place this app deliberately diverges.** No Catan + trademarks or brand assets ship anywhere in it; the island game is listed + under its own name with original art only. The GPL-licensed history that + produced this app remains in git, and the source stays at [adrianoftyriel/ProLibertateGames](https://github.com/adrianoftyriel/ProLibertateGames) as the `upstream` remote. @@ -187,10 +190,10 @@ smaller than a fingertip. Requires JDK 17 and the Android SDK (compileSdk 34). A local build is a dev build: it installs as -`ca.wallacenet.pilgrimsofkatan.dev` under the name *Pilgrims of Katan DEV* on -the dev green field, so it goes on beside a production copy rather than over it. -Set `PLG_CHANNEL=production` to build the production package -(`ca.wallacenet.pilgrimsofkatan`, slate blue). +`ca.wallacenet.pilgrimsofkatan.dev` under the name *Pro Libertate Games DEV* on +the hunting-green sett, so it goes on beside a production copy rather than over +it. Set `PLG_CHANNEL=production` to build the production package +(`ca.wallacenet.pilgrimsofkatan`, clan red). ## CI @@ -271,8 +274,8 @@ Three things move together, all off `isDevBuild` in `app/build.gradle.kts`: | | Production | Dev | | --- | --- | --- | | `applicationId` | `ca.wallacenet.pilgrimsofkatan` | `ca.wallacenet.pilgrimsofkatan.dev` | -| Launcher name | Pilgrims of Katan | Pilgrims of Katan DEV | -| Brand field | slate blue | deep green | +| Launcher name | Pro Libertate Games | Pro Libertate Games DEV | +| Tartan sett | clan red | hunting green | Anything that is not an explicit `PLG_CHANNEL=production` build is a dev build, so a local `assembleDebug` is a dev build too and installs alongside a release diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0ef53d6..8f55f16 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -40,9 +40,9 @@ val versionSeries = (project.findProperty("plgVersionSeries") as String?) ?: "1. // // This one flag drives everything that makes a dev build a separate app rather // than a replacement for the production one — its own applicationId, its own -// launcher name, and its own brand colour. They have to move together: a dev -// package wearing the production name and colours is exactly the confusion -// having both installed is meant to avoid. +// launcher name, and the hunting sett in place of the clan sett. They have to +// move together: a dev package wearing the production name and colours is +// exactly the confusion having both installed is meant to avoid. val isDevBuild = buildChannel != "production" android { @@ -83,19 +83,21 @@ android { resValue( "string", "app_name", - if (isDevBuild) "Pilgrims of Katan DEV" else "Pilgrims of Katan", + if (isDevBuild) "Pro Libertate Games DEV" else "Pro Libertate Games", ) - // The one colour that separates the two installs: slate blue on - // production, deep green on dev. The launcher icon and the splash are - // both built from it, so the drawer shows at a glance which of the two - // copies is which — the two have to stay in step or the icon and the - // splash it opens on would be different brands. - resValue("color", "brand_field", if (isDevBuild) "#2A6B54" else "#2B4A78") - // A darker shade of the same hue, held behind the window for the - // instant before the splash draws, so a launch never flashes the wrong - // colour. - resValue("color", "splash_background", if (isDevBuild) "#153B2F" else "#182A44") + // The one colour that separates the two setts: Wallace red for + // production, Wallace Hunting green for dev. The icon vectors reference + // this rather than a literal, and Tartan.kt picks the matching Compose + // colour off DEV_BUILD below — the two have to stay in step or the + // launcher icon and the splash it opens on would be different cloth. + resValue("color", "tartan_field", if (isDevBuild) "#1E7A3C" else "#E01B24") + // Shades of the same field, so a launch does not flash the wrong colour + // before the tartan is drawn: splash_background is held behind the + // window for that instant, ic_launcher_background is the icon's flat + // fallback. + resValue("color", "splash_background", if (isDevBuild) "#0D2E17" else "#4A0B10") + resValue("color", "ic_launcher_background", if (isDevBuild) "#145C2D" else "#B3121B") buildConfigField("boolean", "DEV_BUILD", isDevBuild.toString()) @@ -131,7 +133,7 @@ android { buildFeatures { compose = true - // For DEV_BUILD, which is how the Compose splash picks its brand colour. + // For DEV_BUILD, which is how the Compose tartan picks its sett. buildConfig = true } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 819e9ad..3881c73 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -25,7 +25,7 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/Theme.PilgrimsOfKatan"> + android:theme="@style/Theme.ProLibertateGames"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml index d082dbf..0e5a48e 100644 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -1,23 +1,15 @@ - + android:fillColor="#00000000" + android:pathData="M0,0h108v108h-108z" /> diff --git a/app/src/main/res/mipmap/ic_launcher.xml b/app/src/main/res/mipmap/ic_launcher.xml index 69be1ce..5dc5e35 100644 --- a/app/src/main/res/mipmap/ic_launcher.xml +++ b/app/src/main/res/mipmap/ic_launcher.xml @@ -1,22 +1,70 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/mipmap/ic_launcher_round.xml b/app/src/main/res/mipmap/ic_launcher_round.xml index 69be1ce..5dc5e35 100644 --- a/app/src/main/res/mipmap/ic_launcher_round.xml +++ b/app/src/main/res/mipmap/ic_launcher_round.xml @@ -1,22 +1,70 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 73a134c..338becd 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,16 +1,16 @@ #FF000000 #FFFFFFFF - - #EFD9A4 + + #0C0C0C + #F2C518 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a16a35a..41e3314 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,7 +1,7 @@ diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index fb26528..492b38a 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -2,7 +2,7 @@ -