Ihr Level bedeutet endlich etwas
Jeder Platz am Tisch verdient jetzt XP, der erste Levelaufstieg kostet 60 XP statt zwei Wochen Spielzeit, und Level bringen einen Rang und Sammelkarten.

Kurz gesagt
XP war eine Zahl, die nichts tat. Nichts im Spiel war je an Ihr Level geknüpft, und überhaupt verdiente nur der Sieger einer Partie welche – was bedeutete, dass rund zwei Drittel der Leute an jedem Tisch eine ganze Partie spielten, verloren, „Partie-XP +0“ sahen und keinen Grund hatten zu glauben, dass die Zahl etwas mit ihnen zu tun hat.
Jetzt verdient jeder Platz. Ihre Platzierung zahlt sich aus, die Monopole, die Sie beim Partieende halten, zahlen sich aus, und das Ende zu erreichen, ohne rauszufliegen, zahlt sich aus. Gewinnen dominiert weiterhin – ein Sieg ist mehr als doppelt so viel wert wie das bestmögliche Verlustergebnis –, aber gut zu verlieren ist nicht mehr nichts wert.
| Was Sie getan haben | XP |
|---|---|
| Die Partie gewonnen | +200 |
| Zweiter Platz | +50 |
| Dritter Platz | +30 |
| Vierter Platz und darunter | +15 |
| Jedes am Ende gehaltene Monopol (bis zu 3) | +10 |
| Das Ende erreicht, ohne auszuscheiden | +20 |
Die Kurve wurde darum herum neu gebaut. Der erste Levelaufstieg kostet jetzt 60 XP, was eine anständige Partie schafft – selbst eine verlorene –, wo es vorher rund zehn Tage Spielzeit brauchte. Die Level danach werden allmählich teurer statt auf einen Schlag.
Und Level bringen jetzt zwei Dinge. Ihr Level trägt einen Rang – 7 davon, vom Anwärter bis zum Meister –, der neben Ihrem Namen auf Ihrem Profil und in der Rangliste steht. Und das Überschreiten eines Meilenstein-Levels lässt eine Grundstücks-Sammelkarte in Ihre Sammlung fallen: die Level 3, 5, 7, 10, 13, 16, 20 und danach jedes 5. Level.

Für technisch Neugierige
Die interessante Hälfte hiervon war das Löschen von Kopien. Die alte Regel – ein Level je 500 XP – war von Hand in fünf Datenbank-Migrationen und drei TypeScript-Dateien geschrieben worden, und sie waren bereits voneinander abgedriftet: Die Test-Fixtures setzten ein Level, das keine Fassung der Regel erzeugen konnte. Jetzt gibt es eine Kurve, in einer Datei, exakt in der Datenbank gespiegelt:
// packages/game-engine/src/progression.ts — one curve, mirrored exactly in SQL
step(L → L+1) = min(60 + 100·(L−1), 1500)
level 2 3 4 5 10 16 17+
xp 60 220 480 840 4,140 11,400 +1,500 eachDie Arithmetik ist bewusst rein ganzzahlig – keine Quadratwurzeln, keine Gleitkommazahlen –, sodass SQL und TypeScript an jeder einzelnen Grenze übereinstimmen statt nur ungefähr, und ein Test, der gegen eine echte Datenbank läuft, vergleicht sie Wert für Wert. Beide Kurven sind steigend, es ist also niemand in der Rangliste an jemandem vorbeigezogen, als die Neuberechnung lief.
Beim Bauen kamen drei Fehler zum Vorschein, die schon eine Weile live waren und die kein Test gefunden hatte: Die Level-Leiste auf dem Ergebnisbildschirm las die Partiebelohnung statt Ihres Gesamtstands, sodass jeder Spieler auf jedem Level dieselbe bei 40 % eingefrorene Leiste sah; ein Sieg in einer kurzen Partie wurde als Niederlage verbucht, sodass diese Siege nie eine Sieg-Mission weiterzählten; und im Team-Modus bekam der siegreiche Teamkamerad überhaupt nichts ausgezahlt und wurde als Niederlage protokolliert, weil einer der beiden Sieger nach Zeilennummer nicht auf dem ersten Platz stand. Alle drei sind behoben, und jeder hat einen Test, der ohne den Fix fehlschlägt.
