ninelands-reddit/PLAN.md
Lukas Müllner 87ade730a4 docs: Entscheidungen zu Seed, Wertung und Subreddit
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-13 15:49:59 +01:00

6.4 KiB
Raw Blame History

PLAN – Ninelands für Reddit

Basic-Version von Ninelands als tägliches Reddit-Spiel (Devvit Web) für den Jam Reddit Game of the Day 2026. Abgabe: 9. Dezember 2026, 03:00 MEZ. Eingereicht wird in „Best Daily Game“ und als Portierung in „Best Ported Daily Game“.

Entscheidungen des Besitzers (2026-11-13)

  • Nur 9×9, nur Englisch.
  • Das Spiel steht im Vordergrund: kein Menü, kein Footer, kein Feedback-Knopf. Ausnahmen sind ein schlanker Startbildschirm (Name, Datum, eigene Statistik/Streak) und eine Ergebniskarte am Ende. Beides ist Teil des Spiels und wird von der Jury ausdrücklich verlangt.
  • Kern: Karte des Tages mit Bestenliste. PvP höchstens später als KI-Duell-Bonus (wenig Spieler gleichzeitig online, viel Aufwand, kostet Polish).
  • Freischaltbares: Themen und Banner aus dem Hauptspiel, gekoppelt an Streak und Sterne statt an Herrscher-Stufen.
  • Lizenz GPL-3.0 (Besitzer ist alleiniger Urheber der Engine). Das Gerüst der Devvit-Vorlage bleibt BSD-3-Clause (LICENSE-TEMPLATE.md).
  • Musik ja, mit einer kleinen Credits-Stelle (CC BY-SA 4.0 verlangt die Nennung). Alle Sprites stammen aus „Mini World Sprites“ (CC0). Nachweise in CREDITS.md.

Phase 0 – Grundlagen

  1. Sync-Skript scripts/sync-engine.sh: holt src/core von einem festen Ninelands-Tag (Vorschlag: v0.11.0) nach src/engine/ und notiert den Tag in src/engine/VERSION. Die Kopie wird nie von Hand geändert. Die Campaign- und Puzzle-JSONs nur mitnehmen, wenn der Import sonst bricht. Besser: prüfen, ob esbuild sie per Tree-Shaking weglässt.
  2. Prüfen, ob die Engine mit TypeScript 7, Biome und esbuild der Vorlage baut. src/engine/ von Biome ausnehmen, denn fremde Formatierung soll nicht zu Änderungen an der Kopie zwingen.
  3. Assets übernehmen: die Tile-Sprites, die das 9×9-Spiel braucht, sowie die Themen und Banner für Phase 2. Bei der Musik auf die App-Größe achten: das Hauptspiel hat 21 MB (6 Titel, Opus + MP3). Vermutlich nur 1–2 Titel und nur ein Format. Das Größenlimit von Devvit vorher in der Doku prüfen.

Phase 1 – Kern (Tagesrätsel)

  1. Tagespost: Ein Scheduler-Job legt jeden Tag um 00:00 UTC einen neuen Post an („Ninelands #N – “). Jeder Tag bekommt so eigene Kommentare, in denen über die Karte diskutiert wird.
  2. Tageskarte: Seed aus dem Datum, 9×9, mit den drei Sternzielen wie im Hauptspiel (★ Gold, ★ Länder, ★ beides), berechnet aus Bot-Partien auf derselben Karte.
  3. Spiel: Brett im Post, Ziele-Zeile live, Rückgängig wie im Hauptspiel.
  4. Abgabe und Prüfung: Der Client schickt die Züge, der Server spielt sie mit derselben Engine nach und speichert nur selbst berechnetes Gold (wie im Hauptspiel). So kann niemand die Bestenliste mit erfundenen Werten fälschen.
  5. Bestenliste je Tag in Redis (Sorted Set): Sortierung wie bei den Ninelands-Ranglisten, also Sterne ↓, Gold ↓, früher abgegeben zuerst. Gewertet wird nur der erste Versuch; danach darf man weiterspielen, das zählt aber nicht. Entscheidung Besitzer.
  6. Streak: aufeinanderfolgende Tage mit gespielter Tageskarte.
  7. Startbildschirm: Name, Nummer und Datum, eigene Streak, „Play“.
  8. Ergebniskarte: Sterne, Gold, Länder, Platz, Streak, Teilen-Zeile (Ninelands #N ★★☆ · 9/9 lands · 85 gold) und der Anstoß, sie in die Kommentare zu posten.
  9. Devvit Journeys: Ereignisse für Start, Abgabe und Streak (Jury-Kriterium).
  10. Credits: ein kleines „ⓘ“ auf dem Startbildschirm mit Musik- und Sprite-Nachweis.
  11. Erstes Spielen: Hinweise im Zusammenhang statt Textwand (Jury-Kriterium „Intuitive Onboarding“).

Phase 2 – Wiederkommen

  1. Themen freischalten über die Streak (z. B. 3 / 7 / 14 Tage), Banner über gesammelte Sterne. Die Auswahl erfolgt direkt auf dem Startbildschirm, ohne eigenes Menü.
  2. User-Flair im Subreddit (z. B. „🔥 12-day streak“, Tagessieger). Vorher in der Doku prüfen, wie Devvit Web Flair setzt.
  3. Winter- bzw. Winterfest-Thema passend zur Bewertung im Dezember.

Phase 3 – optional

  • KI-Duell gegen den Computer als Bonus nach dem Tagesrätsel. Nur, wenn Phase 1 und 2 poliert sind.

Phase 4 – Einreichung (alles nach Rückfrage beim Besitzer)

  • Eigenes Subreddit für das Spiel; öffentlicher Demo-Post (der einzige öffentliche Schritt).
  • App-Listing auf developers.reddit.com (Upload, kein devvit publish).
  • Auf Devpost angeben, dass es eine Portierung ist; optional die Feedback-Umfrage.

Grober Zeitplan

Bis Was
16. Nov. Phase 0
29. Nov. Phase 1 spielbar im Test-Subreddit
4. Dez. Phase 2, Polish
8. Dez. Puffer, Demo-Post, Einreichung

Weitere Entscheidungen (2026-11-13)

  • Eigener Seed für Reddit (Präfix ungleich hivedoku-daily-): Sonst wäre die Tageskarte dieselbe wie auf der Website, und „Watch the best game“ dort verriete die Lösung.
  • Nur der erste Versuch zählt für die Bestenliste; Weiterspielen ist erlaubt, wird aber nicht gewertet.
  • Subreddit: Entwickelt wird im Test-Subreddit, das devvit playtest selbst anlegt. r/Ninelands (falls frei) legt der Besitzer erst für den Demo-Post an. Hochgeladene, nicht veröffentlichte Apps lassen sich nur in Subreddits mit < 200 Mitgliedern installieren – für die Jam-Demo reicht das.

Risiken

  • Devvit ändert sich schnell: Scheduler, Redis, Flair und Journeys vor dem Bauen in der aktuellen Doku lesen (https://developers.reddit.com/docs/llms.txt, die Seiten gibt es als .md, per curl abrufbar).
  • App-Größe durch die Musik.
  • Die Engine kennt viele Modi (Kampagne, Puzzles, Duell). Unnötiges darf nicht ins Bundle wandern (Metafile von esbuild prüfen).

As built

2026-11-13 – Repo, CI, Lizenz

  • Repo DieLustigeTierwesen/ninelands-reddit (privat) angelegt.
  • CI: Die parallel:-Stufe der Vorlage kennt der Forgejo-Runner nicht („Invalid run/uses syntax“). Ersetzt durch einzelne Schritte nacheinander.
  • Lint der Vorlage war rot: Das Biome-Schema 2.6.4 passte nicht zur installierten CLI 2.6.6, und package.json hatte keinen Zeilenumbruch am Ende.
  • Lizenz auf GPL-3.0 umgestellt (LICENSE aus dem Hauptspiel, package.json → GPL-3.0-only). Der BSD-Text der Vorlage bleibt als LICENSE-TEMPLATE.md, denn BSD verlangt, dass der Hinweis erhalten bleibt. CREDITS.md angelegt.