From 5c797c8807e479fa2da81d3e4e8d16dd6ad76703 Mon Sep 17 00:00:00 2001 From: adrianoftyriel <12343778+adrianoftyriel@users.noreply.github.com> Date: Wed, 14 Oct 2026 02:15:30 +0000 Subject: [PATCH] Restore the Pro Libertate Games title and splash; list Katan under Board Games MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The bootstrap rebranded the app to Pilgrims of Katan (WALA-118 review); the decision is to keep the upstream's own identity instead. - Title and splash: the upstream originals restored exactly — the Wallace tartan splash under the "Pro Libertate Games" uncial wordmark (SplashScreen.kt, Tartan.kt), the tartan launcher icon, and the Theme.ProLibertateGames window theme. The game screens go back to the upstream WallaceGold/WallaceRed accents the tartan is woven from. - Names and colours: launcher names back to "Pro Libertate Games" / "Pro Libertate Games DEV"; the channel colours back to the clan red / hunting green setts (resValue tartan_field and friends). The installed identity stays ca.wallacenet.pilgrimsofkatan (+ .dev) — that is the package, not the brand. - Catalogue: Katan is listed under Board Games (3-4 players, original blurb, no third-party marks) with available = false, so dev builds show it as "Coming soon" and a production build hides it until its engine and screen land. - Docs: README/CLAUDE.md/docs/CI.md updated to the restored identity; CatalogTest's invariant now names Katan as the one deliberate exception rather than asserting nothing is unfinished. Structural bootstrap untouched: applicationId, OTA repointed at the Gitea releases, CI workflows, version stamping. Verified: ./gradlew assembleDebug and testDebugUnitTest green — 628 tests, 0 failures. Co-Authored-By: Paperclip --- CLAUDE.md | 20 +- README.md | 75 +++---- app/build.gradle.kts | 32 +-- app/src/main/AndroidManifest.xml | 2 +- .../org/prolibertate/games/MainActivity.kt | 4 +- .../org/prolibertate/games/game/Catalog.kt | 20 ++ .../org/prolibertate/games/ui/SplashScreen.kt | 44 +++-- .../prolibertate/games/ui/game/CardTable.kt | 4 +- .../games/ui/game/KlondikeScreen.kt | 4 +- .../games/ui/game/PegSolitaireScreen.kt | 10 +- .../games/ui/game/YahtzeeScreen.kt | 10 +- .../org/prolibertate/games/ui/theme/Tartan.kt | 187 ++++++++++++++++++ .../org/prolibertate/games/ui/theme/Theme.kt | 28 +-- .../res/drawable/ic_launcher_background.xml | 68 ++++++- .../res/drawable/ic_launcher_foreground.xml | 18 +- app/src/main/res/mipmap/ic_launcher.xml | 72 +++++-- app/src/main/res/mipmap/ic_launcher_round.xml | 72 +++++-- app/src/main/res/values/colors.xml | 16 +- app/src/main/res/values/strings.xml | 2 +- app/src/main/res/values/themes.xml | 2 +- .../prolibertate/games/game/CatalogTest.kt | 20 +- docs/CI.md | 4 +- 22 files changed, 527 insertions(+), 187 deletions(-) create mode 100644 app/src/main/java/org/prolibertate/games/ui/theme/Tartan.kt 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 @@ -